sqlmysql
6. 尚硅谷MySQL数据处理之增删改.pdf
插入
语法
方式一:经典的插入**insert into 表名(字段名1, ...)**
**values(值1, ...);**
或**insert into 表名(字段名1, ...)**
**子查询;**
方式二**insert into 表名**
**set 列名=值, 列名=值, ...**
注意
- 字段个数和值的个数必须一致
- 字段类型和值类型一致或兼容,而且一一对应
- 可以为空的字段,可以不用插入值,或用null填充
- 不可以为空的字段,必须插入值
- 字段可以省略,但默认所有字段,并且顺序和表中的存储顺序一致
需要回滚数据**SET AUTOCOMMIT = FALSE;**
设置不自动提交
#方式一:经典的插入
#1.插入的值的类型要与列的类型一致或兼容
INSERT INTO beauty(id, NAME, sex, borndate, phone, photo, boyfriend_id)
VALUES (13, '唐艺昕', '女', '1990-4-23', '1898888888', NULL, 2);
#2.不可以为null的列必须插入值。可以为null的列如何插入值?
#方式一:显式
INSERT INTO beauty(id, NAME, sex, borndate, phone, photo, boyfriend_id)
VALUES (14, '马丽', '女', '1980-5-23', '1898888888', NULL, 2);
#方式二:隐式
INSERT INTO beauty(id, NAME, sex, phone)
VALUES (15, '娜扎', '女', '1388888888');
#3.列的顺序可以调换,但要与值对应
INSERT INTO beauty(NAME, sex, id, phone)
VALUES ('蒋欣', '女', 16, '110');
#4.列数和值的个数必须一致
INSERT INTO beauty(NAME, sex, id, phone, borndate) #错误❌ 不匹配
VALUES ('关晓彤', '女', 17, '110');
#5.可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致
INSERT INTO beauty
VALUES (18, '梁缘', '男', NULL, '119', NULL, NULL);
#方式二:
INSERT INTO beauty
SET id=19, NAME='刘涛', phone='999';
#两种方式大pk ★
#1、方式一支持插入多行,方式二不支持
INSERT INTO beauty
VALUES (23, '唐艺昕1', '女', '1990-4-23', '1898888888', NULL, 2)
, (24, '唐艺昕2', '女', '1990-4-23', '1898888888', NULL, 2)
, (25, '唐艺昕3', '女', '1990-4-23', '1898888888', NULL, 2);
#2、方式一支持子查询,方式二不支持
INSERT INTO beauty(id, NAME, phone)
SELECT 26, '宋茜', '11809866';
INSERT INTO beauty(id, NAME, phone)
SELECT id, boyname, '1234567'
FROM boys
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:修改beauty表中姓唐的女神的电话为13899888899
UPDATE beauty
SET phone = '13899888899'
WHERE NAME LIKE '唐%';
#案例2:修改boys表中id为2的名称为张飞,魅力值 10
UPDATE boys
SET boyname='张飞', usercp=10
WHERE id = 2;
#2.修改多表的记录
#案例 1:修改张无忌的女朋友的手机号为114
UPDATE boys bo
INNER JOIN beauty b ON bo.`id` = b.`boyfriend_id`
SET b.`phone`='114',
bo.`userCP`=1000
WHERE bo.`boyName` = '张无忌';
#案例2:修改没有男朋友的女神的男朋友编号都为2号
UPDATE boys bo
RIGHT JOIN beauty b ON bo.`id` = b.`boyfriend_id`
SET b.`boyfriend_id`=2
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 表名;**
两种方式的区别
- delete可以加where条件,truncate不能加where
- truncate删除,效率高一丢丢
- 假如要删除的表中有自增长列
如果用delete删除后,再插入数据,自增长列的值从断点开始,
而truncate删除后,再插入数据,自增长列的值从1开始
- truncate删除没有返回值,delete删除返回删除的行数
- 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); ```