sqlmysql
6. 尚硅谷MySQL数据处理之增删改.pdf

插入

语法
方式一:经典的插入
**insert into 表名(字段名1, ...)**
**values(值1, ...);**

**insert into 表名(字段名1, ...)**
**子查询;**
方式二
**insert into 表名**
**set 列名=值, 列名=值, ...**
注意

  1. 字段个数和值的个数必须一致
  2. 字段类型和值类型一致或兼容,而且一一对应
  3. 可以为空的字段,可以不用插入值,或用null填充
  4. 不可以为空的字段,必须插入值
  5. 字段可以省略,但默认所有字段,并且顺序和表中的存储顺序一致

需要回滚数据
**SET AUTOCOMMIT = FALSE;** 设置不自动提交

  1. #方式一:经典的插入
  2. #1.插入的值的类型要与列的类型一致或兼容
  3. INSERT INTO beauty(id, NAME, sex, borndate, phone, photo, boyfriend_id)
  4. VALUES (13, '唐艺昕', '女', '1990-4-23', '1898888888', NULL, 2);
  5. #2.不可以为null的列必须插入值。可以为null的列如何插入值?
  6. #方式一:显式
  7. INSERT INTO beauty(id, NAME, sex, borndate, phone, photo, boyfriend_id)
  8. VALUES (14, '马丽', '女', '1980-5-23', '1898888888', NULL, 2);
  9. #方式二:隐式
  10. INSERT INTO beauty(id, NAME, sex, phone)
  11. VALUES (15, '娜扎', '女', '1388888888');
  12. #3.列的顺序可以调换,但要与值对应
  13. INSERT INTO beauty(NAME, sex, id, phone)
  14. VALUES ('蒋欣', '女', 16, '110');
  15. #4.列数和值的个数必须一致
  16. INSERT INTO beauty(NAME, sex, id, phone, borndate) #错误❌ 不匹配
  17. VALUES ('关晓彤', '女', 17, '110');
  18. #5.可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致
  19. INSERT INTO beauty
  20. VALUES (18, '梁缘', '男', NULL, '119', NULL, NULL);
  21. #方式二:
  22. INSERT INTO beauty
  23. SET id=19, NAME='刘涛', phone='999';
  24. #两种方式大pk ★
  25. #1、方式一支持插入多行,方式二不支持
  26. INSERT INTO beauty
  27. VALUES (23, '唐艺昕1', '女', '1990-4-23', '1898888888', NULL, 2)
  28. , (24, '唐艺昕2', '女', '1990-4-23', '1898888888', NULL, 2)
  29. , (25, '唐艺昕3', '女', '1990-4-23', '1898888888', NULL, 2);
  30. #2、方式一支持子查询,方式二不支持
  31. INSERT INTO beauty(id, NAME, phone)
  32. SELECT 26, '宋茜', '11809866';
  33. INSERT INTO beauty(id, NAME, phone)
  34. SELECT id, boyname, '1234567'
  35. FROM boys
  36. WHERE id < 3;

修改

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

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

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

  1. #1.修改单表的记录
  2. #案例1:修改beauty表中姓唐的女神的电话为13899888899
  3. UPDATE beauty
  4. SET phone = '13899888899'
  5. WHERE NAME LIKE '唐%';
  6. #案例2:修改boys表中id为2的名称为张飞,魅力值 10
  7. UPDATE boys
  8. SET boyname='张飞', usercp=10
  9. WHERE id = 2;
  10. #2.修改多表的记录
  11. #案例 1:修改张无忌的女朋友的手机号为114
  12. UPDATE boys bo
  13. INNER JOIN beauty b ON bo.`id` = b.`boyfriend_id`
  14. SET b.`phone`='114',
  15. bo.`userCP`=1000
  16. WHERE bo.`boyName` = '张无忌';
  17. #案例2:修改没有男朋友的女神的男朋友编号都为2号
  18. UPDATE boys bo
  19. RIGHT JOIN beauty b ON bo.`id` = b.`boyfriend_id`
  20. SET b.`boyfriend_id`=2
  21. WHERE bo.`id` IS NULL;

删除

语法
方式一:delete
单表的删除 ★
**delete from 表名 **
**where 筛选条件;**
多表的删除【补充】
sql92语法
**delete 别名1, **``**别名2** 🔴要删哪个表的数据就在delete后填哪个表
**from 表1 别名1, 表2 别名2**
**where 连接条件**
**and 筛选条件;**
sql99语法
**delete 别名1, 别名2**
**from 表1 别名1**
**inner|left|right join 表2 别名2 on 连接条件**
**where 筛选条件;**
**limit 条目数**
方式二:truncate
**truncate table 表名;**
两种方式的区别

  1. delete可以加where条件,truncate不能加where
  2. truncate删除,效率高一丢丢
  3. 假如要删除的表中有自增长列

如果用delete删除后,再插入数据,自增长列的值从断点开始,
而truncate删除后,再插入数据,自增长列的值从1开始

  1. truncate删除没有返回值,delete删除返回删除的行数
  2. truncate删除不能回滚,delete删除可以回滚 ```sql

    方式一:delete

    1.单表的删除

    案例:删除手机号以9结尾的女神信息

    DELETE FROM beauty WHERE phone LIKE ‘%9’;

2.多表的删除

案例:删除张无忌的女朋友的信息

DELETE b FROM beauty b INNER JOIN boys bo ON b.boyfriend_id = bo.id WHERE bo.boyName = ‘张无忌’;

案例:删除黄晓明的信息以及他女朋友的信息

DELETE b, bo FROM beauty b INNER JOIN boys bo ON b.boyfriend_id = bo.id WHERE bo.boyName = ‘黄晓明’;

方式二:truncate语句

案例:将魅力值>100的男神信息删除

TRUNCATE TABLE boys WHERE userCP >100; #❌

delete pk truncate【面试题★】

区别

DELETE FROM boys; TRUNCATE TABLE boys; INSERT INTO boys (boyname, usercp) VALUES (‘张飞’, 100), (‘刘备’, 100), (‘关云长’, 100); ```