DML(Data Manipulation Language)是指数据操作语言,用来对数据库中表的记录进行更新。
顾名思义,操作数据,因此是针对表记录,不是针对表结构。
实现数据插入需要提供表名、列名、值,因此insert语句中需要包含这几部分。
其语法如下
insert into 表名(列名)values (对应的一行列值), (对应的一行列值), (对应的一行列值)
注意事项
后面的values是复数形式
插入的值类型要与列类型一致或兼容,l两者要一一对应(位置和数量),但不受顺序影响。
列名可省略,默认按表的顺序列出全部字段。根据上一条,值部分需要写出全部。
不可以为null的值必须插入数据。可以为null(表中列的属性为nullable)的列有两种插入方式
#省略可为空列的列名和值 insert into boy(id,boyname) values(123,'张仨') #使用null作为可为空列的值 insert into bot(id,boyname,userCp) values('23','李四',null)
其语法如下
insert into 表名 set 列名=值,列名=值...
这种方式可显式插入有值的列,不必处理null值。
方式一支持批量插入多行数据,方式二不支持
方式一支持子查询,方式2不支持。这导致方式一主流的原因。
insert into shoplist(orderID,flowerID,email,num) SELECT max(orderID),1,'a@163.com',1 from myorder //注意insert后直接是子查询,没有 value关键字。子查询的查询列表是待插入列的值。
顾名思义,更新语句一般修改若干条记录,而不是全表,因此多和where子句联用。可分为更新单表记录和多表记录。
基本语法
update 表名 set 列名=值,列名=值 [where子句] //若没有where子句,则更新全表。
更新多表指将多个表连接起来,作为一个大表。更新该大表的字段。因连接方式分为sql92和sql99,因此更新多表有两种语法
#sql92 update 表1 别名1,表2 别名2 set 列名=值,列名=值 where 别名1.key = 别名2.key //连接条件必须有 and [筛选条件] #sql99 update 表1 别名1 inner join | left outer join |right outer join 表2 别名2 on 别名1.key = 别名2.key //先连接 set 列名=值,列名=值 [where子句]
实例 修改张无忌的女朋友的手机号为1114
#sql99方式 UPDATE beauty b INNER JOIN boys bo ON b.boyfriend_id = bo.id SET b.phone='1114' WHERE bo.boyName = '张无忌' #报错 where和set不能调换顺序 UPDATE beauty b INNER JOIN boys bo ON b.boyfriend_id = bo.id WHERE bo.boyName = '张无忌' SET b.phone='1114'
实例 修改没有男朋友的女神的男朋友的编号都为2
#使用子查询 UPDATE beauty b SET boyfriend_id = 2 WHERE boyfriend_id NOT IN( SELECT DISTINCT id FROM boys ) #使用连接 UPDATE boys bo RIGHT JOIN beauty b ON b.boyfriend_id = bo.id SET b.boyfriend_id = 2 WHERE bo.id IS NULL
删除的最小单位是行,因此删除操作需要找到删除行的位置,这要求sql语句中提供提供表名、筛选条件。删除语句分为单表删除和多表删除
其基本语法如下。若没有where子句,会删除整个表的数据。
delete from 表名 [where子句]
其基本语法如下。注意truncate不能使用where子句。
truncate table 表名
多表删指连接多个表后成为一个中间表,删除中间表的数据。分为sql92和sql99,其语法如下
#sql92 delete 别名1,别名2 //若删除一个表的数据,则只写一个表的别名。否则写两个 from 表1 别名,表2 别名 where 连接条件 and 筛选条件 #sql99 delete 别名1,别名2 //若删除一个表的数据,则只写一个表的别名。否则写两个 from 表1 别名1 inner|left |right join 表名2 别名2 on 连接条件 where 筛选条件