一、DML
DML:数据操作语言:insert、update、delete
(1)插入语句(insert)
INSERT INTO 表名(列 1,列 2,列 3....) VALUES(值 1,值 2,值 3......);
- 普通用法(id是自增所以会自动加一)
INSERT INTO student (name,sex,birthday) VALUES ('品如',0,'2021-09-30 00:00:00');
- 指定字段(其他项则是default)
INSERT INTO student (name) VALUES('珊珊');
- 插入多条数据
INSERT INTO student (name,sex) VALUES ('世贤',1),('艾莉',0);
- 复制数据(创建一个新表,表的定义要和旧表相同)
INSERT INTO student_new (id,name,sex,birthday)
SELECT id,name,sex,birthday
FROM student;
注意:
INSERT INTO -- 数据库会检查主键(PrimaryKey),如果重复的话会报错。
INSERT IGNORE INTO -- 如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条插入语句。
(2)修改语句(update)
UPDATE 表名 SET 列 1=新值 1 ,列 2 = 新值 2,.....WHERE 条件;
- 修改所有数据(不推荐使用,不带条件会全部修改)
UPDATE `student` SET `name = '珊珊';
- 指定条件修改
UPDATE `student` SET `name`='艾莉',`sex`=0 WHERE id=1;
- 多表更新
-- 修改雷佳音的电话号码, phone在表user_detail
UPDATE `user` u
INNER JOIN `user_detail` ud ON u.`id` = ud.`user_id`
SET ud.`phone` = '13866888866'
WHERE
u.`name` = '雷佳音';
(3)删除语句(delete)
DELETE FROM 表名 WHERE 条件;
- 单表删除
DELETE FROM `student` WHERE `id` = 1; -- 不带条件会删除所有
- 多表删除
-- 删除雷佳音的所有信息
DELETE
u,
ud
FROM
`user` u
INNER JOIN `user_detail` ud ON u.`id` = ud.`user_id`
WHERE
u.`name` = '雷佳音';
(4)清空表(truncate)
TRUNCATE TABLE school; -- 相当于按照原表的格式创建一张新表
二、重点:删除三兄弟的区别。
-
delete:一行一行地删除表中数据,删除内容但不删除定义;
delete是DML语言,操作时原数据会被放到 rollback segment中,可以被回滚。
-
drop:删除内容和定义,释放空间,即删除整个表;
-
truncate:清空表中全部数据,删除内容但不删除定义。
-
truncate后自增id标识列从头开始计算,但delete后是从上一个数开始;
-
truncate是DDL语言,操作时不会进行存储,不能进行回滚。
-
引用: