5. 基础SQL-DML语句-对数据库表数据增删改
分类 | 描述 | 关键字 |
DML(Data Manipulation Language) 数据操作语言 | 用来对数据库中表的数据进行增删改 | insert,delete, update等 |
1. 新增记录
1.1 新增全部字段数据
- 罗列所有的字段
INSERT INTO 表名 (字段名1, 字段名2, 字段名3…) VALUES (值1, 值2, 值3); - 不写字段名
INSERT INTO 表名 VALUES (值1, 值2, 值3…);
此时值的个数,顺序,类型要和数据库表字段的个数,顺序,类型保持一致
1.2 新增部分字段数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
1.3 关键字说明及注意事项
1. 关键字说明
INSERT INTO 表名 //表示往哪张表中添加数据
(字段名1, 字段名2, …) //要给哪些字段设置值
VALUES (值1, 值2, …); //设置具体的值
2. 注意
值与字段个数,顺序,类型都必须对应
值的数据大小必须在字段的长度范围内
除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
如果要插入空值,可以不写字段,或者插入null
具体操作:
-- 添加一条记录(罗列所有字段方式): id为1,姓名为tom,性别为男,生日为2020-05-20
insert into stu (id,name,sex,birthday) values (1,'tom','男','2020-05-20');
-- 添加一条记录(省去字段名称不写方式): id为2,姓名为汤姆,性别为男,生日为2020-05-21
insert into stu values (2,'汤姆','男','2020-05-21');
-- 添加一条记录:姓名为柳岩,性别为女
insert into stu (name,sex) values('柳岩','女');
示例如下:
-- 查看当前stu表数据
mysql> select * from stu;
Empty set (0.00 sec)
-- 添加一条记录(罗列所有字段方式): id为1,姓名为tom,性别为男,生日为2020-05-20
mysql> insert into stu (id,name,sex,birthday) values (1,'tom','男','2020-05-20');
Query OK, 1 row affected (0.00 sec)
-- 可以查看成功添加数据
mysql> select * from stu;
+------+------+------+------------+
| id | name | sex | birthday |
+------+------+------+------------+
| 1 | tom | 男 | 2020-05-20 |
+------+------+------+------------+
1 row in set (0.00 sec)
-- 添加一条记录(省去字段名称不写方式): id为2,姓名为汤姆,性别为男,生日为2020-05-21
mysql> insert into stu values (2,'汤姆','男','2020-05-21');
Query OK, 1 row affected (0.00 sec)
-- 可以查看成功添加数据
mysql> select * from stu;
+------+--------+------+------------+
| id | name | sex | birthday |
+------+--------+------+------------+
| 1 | tom | 男 | 2020-05-20 |
| 2 | 汤姆 | 男 | 2020-05-21 |
+------+--------+------+------------+
2 rows in set (0.00 sec)
-- 添加一条记录:姓名为柳岩,性别为女
mysql> insert into stu (name,sex) values('柳岩','女');
Query OK, 1 row affected (0.00 sec)
-- 查询stu表数据
mysql> select * from stu;
+------+--------+------+------------+
| id | name | sex | birthday |
+------+--------+------+------------+
| 1 | tom | 男 | 2020-05-20 |
| 2 | 汤姆 | 男 | 2020-05-21 |
| NULL | 柳岩 | 女 | NULL |
+------+--------+------+------------+
3 rows in set (0.00 sec)
mysql>
2. 蠕虫复制
什么是蠕虫复制:
在已有的数据基础之上,将原来的数据进行复制,插入到对应的表中
语法格式:
INSERT INTO 表名1 SELECT * FROM 表名2;
作用:将表名2 中的数据复制到 表名1 中
具体操作:
-- 1.快速创建一张stu2表,结构与stu一样
create table stu2 like stu;
-- 2.查询stu2表结构和表中的数据
desc stu2;
select * from stu2;
-- 3.蠕虫复制stu表中的数据到stu2表中
insert into stu2 select * from stu;
示例如下:
-- 创建表结构与stu表一致的表stu2
mysql> create table stu2 like stu;
Query OK, 0 rows affected (0.02 sec)
-- 查看创建好的stu2表结构
mysql> desc stu2;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| sex | varchar(10) | YES | | NULL | |
| birthday | date | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
-- 查看当前stu2的表数据
mysql> select * from stu2;
Empty set (0.00 sec)
-- 蠕虫复制
mysql> insert into stu2 select * from stu;
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
-- 再次查询stu2的数据
mysql> select * from stu2;
+------+--------+------+------------+
| id | name | sex | birthday |
+------+--------+------+------------+
| 1 | tom | 男 | 2020-05-20 |
| 2 | 汤姆 | 男 | 2020-05-21 |
| NULL | 柳岩 | 女 | NULL |
+------+--------+------+------------+
3 rows in set (0.00 sec)
mysql>
3. 更新表记录
sql格式
- 不带条件修改数据
UPDATE 表名 SET 字段名=值,字段名=值; - 带条件修改数据
UPDATE 表名 SET 字段名=值 WHERE 字段名=值 AND字段名称=值;
关键字说明
update // 修改数据
set //修改哪些字段
where 条件; //指定条件
具体操作:
-- 需求:修改表中的性别为'女'
update stu set sex='女';
-- 需求:将表中id为1的性别改为男
update stu set sex='男' where id=1;
示例如下:
-- 查看当前表数据
mysql> select * from stu;
+------+--------+------+------------+
| id | name | sex | birthday |
+------+--------+------+------------+
| 1 | tom | 男 | 2020-05-20 |
| 2 | 汤姆 | 男 | 2020-05-21 |
| NULL | 柳岩 | 女 | NULL |
+------+--------+------+------------+
3 rows in set (0.00 sec)
-- 修改所有数据的sex为 女
mysql> update stu set sex='女';
Query OK, 2 rows affected (0.00 sec)
Rows matched: 3 Changed: 2 Warnings: 0
-- 查看确认修改后的表数据
mysql> select * from stu;
+------+--------+------+------------+
| id | name | sex | birthday |
+------+--------+------+------------+
| 1 | tom | 女 | 2020-05-20 |
| 2 | 汤姆 | 女 | 2020-05-21 |
| NULL | 柳岩 | 女 | NULL |
+------+--------+------+------------+
3 rows in set (0.00 sec)
-- 根据条件 id=1 修改数据的 sex 为 男
mysql> update stu set sex='男' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
-- 查看修改后的数据
mysql> select * from stu;
+------+--------+------+------------+
| id | name | sex | birthday |
+------+--------+------+------------+
| 1 | tom | 男 | 2020-05-20 | -- sex 改为 男
| 2 | 汤姆 | 女 | 2020-05-21 |
| NULL | 柳岩 | 女 | NULL |
+------+--------+------+------------+
3 rows in set (0.00 sec)
mysql>
4. 删除表记录
- 不带条件删除数据
DELETE FROM 表名; - 根据条件删除数据
DELETE FROM 表名 WHERE 字段名=值; - truncate删除表记录
TRUNCATE TABLE 表名;
truncate和delete的区别:
delete是将表中的数据一条一条删除
truncate是将整个表摧毁,重新创建一个新的表,新的表结构和原来表结构一模一样
具体操作:
-- 需求:删除id为2的学生信息
delete from stu where id=2;
-- 需求:删除整张表中的所有数据
delete from stu;
truncate table stu;
示例如下:
-- 查询当前的stu表数据
mysql> select * from stu;
+------+--------+------+------------+
| id | name | sex | birthday |
+------+--------+------+------------+
| 1 | tom | 男 | 2020-05-20 |
| 2 | 汤姆 | 女 | 2020-05-21 |
| NULL | 柳岩 | 女 | NULL |
+------+--------+------+------------+
3 rows in set (0.00 sec)
-- 删除id为2的学生信息
mysql> delete from stu where id=2;
Query OK, 1 row affected (0.00 sec)
-- 查看删除后的表数据
mysql> select * from stu;
+------+--------+------+------------+
| id | name | sex | birthday |
+------+--------+------+------------+
| 1 | tom | 男 | 2020-05-20 |
| NULL | 柳岩 | 女 | NULL |
+------+--------+------+------------+
2 rows in set (0.00 sec)
-- 删除全表的数据
mysql> delete from stu;
Query OK, 2 rows affected (0.00 sec)
mysql> select * from stu;
Empty set (0.00 sec)
-- 蠕虫复制,将数据重新写入 stu
mysql> insert into stu select * from stu2;
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
-- 查询 stu 表数据
mysql> select * from stu;
+------+--------+------+------------+
| id | name | sex | birthday |
+------+--------+------+------------+
| 1 | tom | 男 | 2020-05-20 |
| 2 | 汤姆 | 男 | 2020-05-21 |
| NULL | 柳岩 | 女 | NULL |
+------+--------+------+------------+
3 rows in set (0.00 sec)
-- 摧毁 stu 表并重新创建 stu 表
mysql> truncate table stu;
Query OK, 0 rows affected (0.01 sec)
-- 查看 stu 表数据
mysql> select * from stu;
Empty set (0.00 sec)
mysql>