Skip to content

Latest commit

 

History

History
121 lines (87 loc) · 4.14 KB

03.DML语言.md

File metadata and controls

121 lines (87 loc) · 4.14 KB

6. DML语言

数据操作语言

  • 插入:insert
  • 修改:update
  • 删除:delete

6.1 插入语句

  • 方式一

语法:insert into 表名(列名,...) values(值1,...);

#1.插入值的类型要与列的类型一致或兼容( '123' -> 123)
insert into beauty(id,name,sex,borndate,phone,photo,boyfriend_id) values(13,'tangyixin','g','1990-4-23','18988888888',NULL,2);

#2.不可以为NULL的列必须插入值,可以为NULL的列如何插入值
insert into beauty(id,name,sex,borndate,phone,photo,boyfriend_id) values(13,'tangyixin','g','1990-4-23','18988888888',NULL,2);
insert into beauty(id,name,sex,borndate,phone,boyfriend_id) values(13,'tangyixin','g','1990-4-23','18988888888',2);

#3.列的顺序可以调换
insert into beauty(name, sex, id, phone) values('jiangxin', 'g', 16, '110');

#4.列数和值的个数必须一致
#insert into beauty(name, sex, id, phone, boyfriend_id) values('guanxiaotong', 'g', 17, '110');

#5.可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致
insert into beauty values(18, 'zhangfei', 'm', null, '119', null, null);
  • 方式二

语法:insert into 表名 set 列名=值, 列名=值,...;

insert into beauty set id=19, name='liutao', phone='999';

对比:

  1. 方式一支持插入多行,方式二不支持
  2. 方式一支持子查询,方式二不支持
#1.
insert into beauty values(20, 'zhangfei0', 'm', null, '119', null, null),
(21, 'zhangfei1', 'm', null, '119', null, null),
(22, 'zhangfei2', 'm', null, '119', null, null);
#2.
insert into beauty(id, name, phone) select 26, 'songqian', '11809866';
insert into beauty(id, name, phone) select id, boyname, '11809866' from boys where id < 3;

6.2 修改语句

  1. 修改单表的记录
  • 语法:update 表名 set 列=新值, 列=新值,... where 筛选条件;

  • 执行顺序:update -> where -> set

  1. 修改多表的记录(补充)
  • sql92 语法:update 表1 别名, 表2 别名 set 列=值,... where 连接条件 and 筛选条件;

  • sql99 语法:update 表1 别名 inner|left|right join 表2 别名 on 连接条件 set 列=新值,... where 筛选条件;

#解除输入的安全模式
SET SQL_SAFE_UPDATES = 0;

#修改beauty表中姓唐的女生的电话为 13899888899
update beauty set phone = '13899888899' where name like 'tang%';

#修改boys表中id号为2的名称为张飞,魅力值为10
update boys set boyname ='zhangfei', usercp = 10 where id = 2;

#修改张无忌的女朋友的手机号为114
update boys bo inner join beauty b on bo.id = b.boyfriend_id set b.phone = 114 where bo.boyName = 'zhangwuji';

#修改没有男朋友的女神的男朋友编号都为2号
update boys bo right join beauty b on bo.id = b.boyfriend_id set b.boyfriend_id = 2 where bo.id is null;

6.3 删除语句

  1. 方式一: delete
  • 单表的删除
    • 语法:delete from 表名 where 筛选条件;
  • 多表的删除(级联删除)
    • sql92语法:delete 表1的别名, 表2的别名 from 表1 别名, 表2 别名 where 连接条件 and 筛选条件;
    • sql99语法:delete 表1的别名, 表2的别名 from 表1 别名 inner|left|right join on 表2 别名 on 连接条件 where 筛选条件;
#单表的删除
#删除手机号以9结尾的女生信息
delete from beauty where phone like '%9';
#多表的删除
#删除张无忌的女朋友的信息
delete b from beauty b inner join boys bo on b.boyfriend_id = bo.id where bo.boyName = 'zhangwuji';
#删除黄晓明的信息和他女朋友的信息
delete b, bo from beauty b inner join boys bo on b.boyfriend_id = bo.id where bo.boyName = 'huangxiaoming';
  1. 方式二: truncate
  • 删除全部数据

  • 语法:truncate table 表名;

#将魅力值大于100的男生信息删除
truncate table boys;
  1. 对比⭐
  • 假如要删除的表中由自增长列,如果用delete删除后,再插入数据,自增长列的值从断点开始;而truncate删除后,再插入数据,自增长列的值从1开始
  • delete 可以加 where 条件, truncate 不可以
  • truncate删除,效率高一些
  • truncate删除没有返回值,delete删除有返回值
  • 事务:truncate删除不能回滚,delete删除可以回滚