DML语言
DML(Data Manipulation language)数据操纵语言
关键字:insert update delete
作用:对表中数据的增删改
一、数据的插入
语法:
插入单行:
INSERT INTO 表名(字段名1,字段名2,……) VALUE (值1,值2,……);
插入多行:
INSERT INTO 表名(字段名1,字段名2,……) VALUE (值1,值2,……),(值1,值2,……),(值1,值2,……);
特点:
- 字段和值列表一一对应,包含类型、约束等必须匹配
- 数值型的值,不用单引号;非数值型的值,必须使用单引号
- 字段顺序无要求
案例一:要求字段和值列表一一对应,且遵循类型和约束的限制
INSERT INTO stuinfo(stuid,stuname,stugender,email,borndate) VALUE(1,'吴倩','男','wuqian@qq.com','2020-5-19');
案例二:可以为空字段如何插入
INSERT INTO stuinfo(stuid,stuname,email) VALUE(3,'哈哈','haha@qq.com');
案例三:默认字段如何插入
方案1:字段名写上,值使用DEFAULT
INSERT INTO stuinfo(stuid,stuname,email,stugender) VALUE(4,'hehe','hehe@qq.com',DEFAULT);
方案2:字段名和值都不写
INSERT INTO stuinfo(stuid,stuname,email) VALUE(4,'hehe','hehe@qq.com');
案例四:可以省略字段列表,默认所有字段
INSERT INTO stuinfo VALUE(8,'林','女','lin@qq.com','2020-10-23');
二、设置自增长列
特点:
- 自增长列要求必须设置在一个键上,比如主键或者唯一键
- 自增长列要求数据类型为数值型
- 一个表至多有一个自增长列
设置方法:
1) 图形化界面设置自增长列
2) 代码设置自增长列:在约束后面加AUTO_INCREMENT
案例:创建gradeinfo表,将grade列设置为自增长列
CREATE TABLE IF NOT EXISTS gradeinfo(
grade INT PRIMARY KEY AUTO_INCREMENT,
gradename VARCHAR(20)
);
在添加了自增长列的表中添加数据
INSERT INTO gradeinfo VALUE(NULL,'一年级'),(NULL,'二年级'),(NULL,'三年级');
INSERT INTO gradeinfo(gradename) VALUES('四年级'),('五年级'),('六年级');
三、修改数据
1. 修改单表的数据
语法:
update 表名
set 列=新值,列=新值,…… #字符型和日期型要加单引号,数值型不用加
where 筛选条件 #和查询的筛选条件类似
案例:修改beauty中的热巴为关晓彤
UPDATE beauty
SET NAME='关晓彤'
WHERE id=4;
2. 修改多表的数据
sql92语法:
update 表1 别名,表2 别名
set 列=新值,列=新值,……
where 连接条件
and 筛选条件;
sql99语法:
update 表1 别名
[连接类型] join 表2 别名
on 连接条件
set 列=新值,……
where 筛选条件
案例:修改鹿晗女朋友的手机号为123456789
UPDATE boys bo
JOIN beauty b
ON bo.`id`=b.`boyfriend_id`
SET b.phone=123456789
WHERE bo.id=2;
四、删除数据
方式1:DELETE语句:删除整行
语法:DELETE FROM 表名 WHERE 筛选条件;
方式2:TRUNCATE语句:删除表中所有数据
语法:TRUNCATE TABLE 表名
案例:
#案例一:删除所有吴倩的信息
DELETE FROM stuinfo WHERE stuname='吴倩';
#案例二:删除表中所有数据
TRUNCATE TABLE stuinfo;
[面试题]delete和truncate的区别
- DELETE可以添加WHERE条件
TRUNCATE不能添加WHERE条件,一次性清除所有数据 - TRUNCATE的效率更高
- 如果删除带自增长列的表
使用DELETE删除后,重新插入数据,记录从断点开始
使用TRUNCATE删除后,重新插入数据,记录从1开始
#使用truncate删除表中所有数据
TRUNCATE TABLE gradeinfo;
#向表中添加数据
INSERT INTO gradeinfo VALUE(NULL,'一年级'),(NULL,'二年级'),(NULL,'三年级');
#使用delete删除表中所有数据
DELETE FROM gradeinfo;
#向表中添加数据
INSERT INTO gradeinfo VALUE(NULL,'一年级'),(NULL,'二年级'),(NULL,'三年级');
-
DELETE删除数据,会返回受影响的行数
TRUNCATE删除数据,不会返回受影响的行数
-
DELETE删除数据,可以支持事务回滚
TRUNCATE删除数据,不支持事务回滚