定义
DML是对表中数据进行操作的语言,涉及的关键字:INSERT UPDATE DELETE
- INSERT:向表中插入新数据的语句
- UPDATE:修改表中数据的语句
- DELETE:删除表中数据的语句
准备工作
USE mydb; 使用mydb库
CREATE TABLE person( 创建表person
name VARCHAR(30),
age INT(3)
)
INSERT语句-向表中插入数据
语法
INSERT INTO 表名 (字段1,字段2,字段3,...) VALUES (值1,值2,值3,...)
向表中插入一条记录,将值1插入的到字段1中,将值2插入到字段2中
例
向person表中插入记录
INSERT INTO person (name,age) VALUES ('张三',22);
INSERT INTO person (age,name) VALUES (33,'李四');
INSERT INTO person (name,age) VALUES (36,'王五'); 不可以,值的顺序与前面指定的字段不匹配
INSERT INTO person (name,age) VALUES ('王五') 不可以,值的个数与前面指定的字段不匹配
注:
- 在数据库中,字符串的字面量是使用单引号括起来的,需要注意
- 在INSERT语句中指定的字段与VALUES后面指定的值的顺序,个数,类型要完全一致
- 在INSERT语句中字段指定时的顺序和个数可以与表结构定义时不一致
补充
查询表中数据的语法
SELECT * FROM 表名
例
SELECT * FROM person
插入默认值
INSERT语句中指定字都时,忽略的字段会被插入默认值。当表中字段没有被明确指定默认值时,默认值一律为NULL
例
INSERT INTO person (name) VALUES ('王五')
此时该条记录插入后,age字段使用默认值NULL
默认值的指定
注:指定默认值是属于DDL语句的范畴
使用DEFAULT关键字来为字段指定默认值,可以在创建表时,也可以在修改表时指定
在创建表时为字段指定默认值
CREATE TABLE person(
name VARCHAR(30) DEFAULT '无名氏',
age INT(3) DEFAULT 30
)
修改表时为字段指定默认值
ALTER TABLE person CHANGE name name VARCHAR(30) DEFAULT '无名氏'
可以使用DESC 表名 在查看表结构时看到字段的默认值
此时向person表中插入数据时,若不指定name字段,该字段默认值插入’无名氏’
INSERT INTO person (age) VALUES (55)
全列插入
在INSERT语句中不指定字段时,为全列插入,此时要求VALUES子句后面指定的值的个数,顺序,类型必须与表结构中字段完全一致
补充说明
子句
在SQL语句中一个关键字可以组成一个子句
例
INSERT INTO person(name,age) INSERT子句
VALUES('张三',22) VALUES子句
这两个子句整体构成了INSERT语句
语法
INSERT INTO 表名 VALUES(值1,值2,...) 此时就要求VALUES子句中指定的值必须与表结构一致
例
INSERT INTO person VALUES('赵六',15)
插入默认值
INSERT INTO person VALUES(DEFAULT,15) 使用DEFAULT关键字表达该字段插入默认值
插入NULL值
INSERT INTO person VALUES(NULL,78) 使用NULL关键字表达该字段插入NULL值
下面是错误示范:
INSERT INTO person VALUES(15,'赵六') 不可以,与person表结构字段顺序不一致
INSERT INTO person VALUES('赵六') 不可以,与person表结构字段顺序不一致
批量插入
语法
INSERT INTO 表名(字段...) VALUES(第一组值...),(第二组值...),....
例
一次插入三条记录
INSERT INTO person(name,age) VALUES('阿猫',11),('阿狗',22),('阿三',33)
UPDATE语句-修改表数据
语法
UPDATE 表名
SET 字段1=新值,字段2=新值,...
[WHERE 过滤条件]
例
UPDATE person
SET age=40
此时该SQL执行后,person表中每条记录的age字段都会被改为40
注:当UPDATE语句中不添加WHERE子句时,会将表中所有记录进行修改,这种操作实际开发中很少见
WHERE子句在UPDATE中的作用
当UPDATE语句添加了WHERE子句时,只有满足WHERE子句要求的记录才会被修改
例
修改张三的年龄为22
UPDATE person
SET age=22
WHERE name='张三'
数据库在修改记录时对表是逐行进行的,每一行是否进行修改取决于该行记录是否满足WHERE子句的条件要求
将40岁的人改为36岁
UPDATE person
SET age=36
WHERE age=40
WHERE子句基础条件
WHERE子句会在后面DQL中详细展开介绍
WHERE中基础条件:>,>=,<,<=,=,<>(首先"=“在数据库中表达等于,”<>“在数据库中表达不等于。”!="也可以表达不等于,但不是SQL92标准)
例
将年龄高于30岁的人改为29
UPDATE person
SET age=29
WHERE age>30
使用表达式修改
将每个人的年龄涨一岁
UPDATE person
SET age=age+1
修改多字段
将李四的名字改为'李老四',年龄改为66
UPDATE person
SET name='李老四',age=66
WHERE name='李四'
DELETE语句-删除表中数据
语法
DELETE FROM 表名
[WHERE 过滤条件]
注:DELETE语句通常不会忽略WHERE子句,否则是清空表操作!
例
删除person表中'李老四'
DELETE FROM person
WHERE name='李老四' //仅删除person表中name字段为'李老四'的记录
删除年龄小于25岁的人
DELETE FROM person
WHERE age<25
清空表
DELETE FROM person
总结
- INSERT语句,向表中插入数据的语言
- INSERT语句指定的字段顺序,个数可以与表结构不一致,但是VALUES子句后指定的值必须与指定的字段顺序,类型,个数完全一致
- INSERT语句在指定字段时,可以忽略某些字段,此时插入数据时被忽略的字段会插入默认值
- INSERT语句中可以使用关键字DEFAULT显示声明插入默认值
- INSERT语句中可以使用关键字NULL显示声明插入NULL值
- INSERT语句中不指定字段时为全列插入,此时VALUES后指定的值的顺序,个数,类型要与表结构完全一致。实际开发中不推荐这样的写法。
- UPDATE语句,修改表中记录的语言
- UPDATE语句通常要指定WHERE子句,如果不指定则为全表修改
- DELETE语句,删除表中记录的语言
- DELETE语句通常要指定WHERE子句,否则是清空表操作