public class Test {
/**
表内容的操作:
增删查改(CRUD) create retrieve update delete
1.新增:
insert into 表名 values(值,值,值……); (这里的列的个数,和类型,要和表结构匹配)
mysql> insert into test values(1,'张三');
Query OK, 1 row affected (0.01 sec)
(SQL中,表示字符串可以使用 ' 也可以使用 “)
mysql> insert into test values(2,"李四");
Query OK, 1 row affected (0.01 sec)
隐式类型转换
mysql> insert into test values('3','王五');
Query OK, 1 row affected (0.00 sec)
错误示例
mysql> insert into test values('李六',4);
ERROR 1366 (HY000): Incorrect integer value: '李六' for column 'id' at row 1
1.1 插入数据的时候,还可以指定某些列进行插入:
insert into 表名 (列名,列名……) values (值,值……);
mysql> insert into test (name) values ('李华');
Query OK, 1 row affected (0.04 sec)
mysql> insert into test (id) values (4);
Query OK, 1 row affected (0.00 sec)
mysql> insert into test (id ,name) values (4,'小明');
Query OK, 1 row affected (0.01 sec)
1.2 一次多行插入:
insert into 表名 values(值,值...),(值,值...),(值,值...);
mysql> insert into test values(1,'杨玉环'),(2, '安其拉'),(3, '小乔');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
插入三条记录:
(1)一次插入一行,分三个SQL完成
(2)一次插入三行,一个SQL搞定
客户端-服务器交互过程中,交互的次数越多,整体的开销就越大,花的时间就越长!!!
1.3 配合使用:
mysql> insert into test (name) values('澜'),('百里玄策'),('孙悟空');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
1.4 插入时间:
mysql> insert into testTime values('2024-05-12 14:12:00');
Query OK, 1 row affected (0.01 sec)
now() -> 获取到当前时间:
mysql> insert into testTime values(now());
Query OK, 1 row affected (0.01 sec)
mysql> select * from testTime;
+---------------------+
| time |
+---------------------+
| 2024-05-12 14:12:00 |
| 2024-05-12 14:14:18 |
+---------------------+
2 rows in set (0.00 sec)
2.查询:
2.1 全列查询:
select * from 表名; *称为通配符 *可以指代所有的列
mysql> select * from test;
+------+----------+
| id | name |
+------+----------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
| NULL | 李华 |
| 4 | NULL |
| 4 | 小明 |
| 1 | 杨玉环 |
| 2 | 安其拉 |
| 3 | 小乔 |
| NULL | 澜 |
| NULL | 百里玄策 |
| NULL | 孙悟空 |
+------+----------+
12 rows in set (0.00 sec)
(select *是一个非常危险的操作!!!) ---> (如果表比较小,select *都无所谓,一旦表非常的大,千万/亿 级别的数据量,此时,进行select就会产生大量的 硬盘I/O 和 网络I/O)
(硬盘和网卡的读写速度都是存在上限的,一旦触发select *意味着很可能就把 硬盘/网卡 带宽给吃满了(堵车))
(那么此时其他的客户端尝试访问数据库,访问操作就无法进行正常进行了!!!)
(以后在工作中,尤其是“生产环境”,一定要慎重使用 select * !!!)
2.2 指定列查询:
select 列名,列名......from 表名;
mysql> select id from test;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| NULL |
| 4 |
| 4 |
| 1 |
| 2 |
| 3 |
| NULL |
| NULL |
| NULL |
+------+
12 rows in set (0.00 sec)
2.3 查询的时候指定表达式:
mysql> create table score(id int, name varchar(30), chinese decimal(3,1), math decimal(3,1), english decimal(3,1));
Query OK, 0 rows affected (0.03 sec)
mysql> desc score;
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| chinese | decimal(3,1) | YES | | NULL | |
| math | decimal(3,1) | YES | | NULL | |
| english | decimal(3,1) | YES | | NULL | |
+---------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
mysql> insert into score (id, name, chinese, math, english) values (1,'唐三藏', 67, 98, 56),
-> (2,'孙悟空', 87.5, 78, 77),
-> (3,'猪悟能', 88, 98.5, 90),
-> (4,'曹孟德', 82, 84, 67),
-> (5,'刘玄德', 55.5, 85, 45),
-> (6,'孙权', 70, 73, 78.5),
-> (7,'宋公明', 75, 65, 30);
Query OK, 7 rows affected (0.00 sec)
Records: 7 Duplicates: 0 Warnings: 0
mysql> desc score;
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| chinese | decimal(3,1) | YES | | NULL | |
| math | decimal(3,1) | YES | | NULL | |
| english | decimal(3,1) | YES | | NULL | |
+---------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
mysql> select * from score;
+------+--------+---------+------+---------+
| id | name | chinese | math | english |
+------+--------+---------+------+---------+
| 1 | 唐三藏 | 67.0 | 98.0 | 56.0 |
| 2 | 孙悟空 | 87.5 | 78.0 | 77.0 |
| 3 | 猪悟能 | 88.0 | 98.5 | 90.0 |
| 4 | 曹孟德 | 82.0 | 84.0 | 67.0 |
| 5 | 刘玄德 | 55.5 | 85.0 | 45.0 |
| 6 | 孙权 | 70.0 | 73.0 | 78.5 |
| 7 | 宋公明 | 75.0 | 65.0 | 30.0 |
+------+--------+---------+------+---------+
7 rows in set (0.00 sec)
mysql> select name, chinese+10 from score; (查询的时候指定表达式:)
+--------+------------+
| name | chinese+10 |
+--------+------------+
| 唐三藏 | 77.0 |
| 孙悟空 | 97.5 |
| 猪悟能 | 98.0 |
| 曹孟德 | 92.0 |
| 刘玄德 | 65.5 |
| 孙权 | 80.0 |
| 宋公明 | 85.0 |
+--------+------------+ (这样的结果,只是数据库查询过程中,生成的“临时表”,数据库本体(数据库服务器硬盘上的数据)是没有任何改变的)
7 rows in set (0.01 sec)
2.4 在一个表达式中,还可以引入多个列表与运算
mysql> select name,chinese + math + english from score;
+--------+--------------------------+
| name | chinese + math + english |
+--------+--------------------------+
| 唐三藏 |