定义
DML是对表中数据进行操作的语言,涉及的关键字:INSERT UPDATE DELETE
- INSERT:向表中插入新数据的语句
- UPDATE:修改表中数据的语句
- DELETE:删除表中数据的语句
准备工作
USE mydb; 使用mydb库
CREATE TABLE person( 创建表personname 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子句,否则是清空表操作