DML语言
插入:insert
修改:update
删除:delete
一、插入语句
方式一:insert into 表名(列名,...) values(值1,...);
SELECT * FROM `beauty`;
#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(13, '唐艺昕', '女', '1990-4-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)
VALUES('关晓彤', '女', 17, '110');
#5、可以省略列名,默认所有列(列名和值要一一对应)
INSERT INTO beauty
VALUES(18,'张飞','男', NULL, '119', NULL, NULL);
#方式二:
/*
insert into 表名
set 列名 = 值, 列名 = 值,...
*/
INSERT INTO beauty
SET id = 19, NAME = '刘涛', phone='999';
#两种方式大比较★
#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;
#二、修改语句
/*
1、修改单表的记录★
语法:
update 表名
set 列 = 新值, 列 = 新值,...
where 筛选条件;
2、修改多表的记录【补充】
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'
WHERE bo.`boyName` = '张无忌';
#案例2:将没有男朋友的女生的男朋友的编号都改为2
#分析:女生一定有,男生可能没有,故beauty表为主表
UPDATE boys bo
RIGHT JOIN beauty b
ON bo.`id` = b.`boyfriend_id`
SET b.`boyfriend_id` = 2
WHERE bo.`id` IS NULL;
#三、删除语句
/*
方式一:delete
语法:
1、单表的删除【★】
delete from 表名 where 筛选条件
2、多表的删除【补充】
sql92语法:
delete 表1的别名, 表2的别名
from 表1 别名, 表2 别名
where 连接条件
and 筛选条件;
sql99语法:
delete 表1的别名, 表2的别名
from 表1 别名
inner|left|right join 表2 别名 on 连接条件
where 筛选条件;
方式二:truncate
语法:truncate table 表名;
效果:清空整个表
注意:不能跟where语句
*/
#方式一:delete
#1、单表的删除
#案例:删除手机号以9结尾的女生信息
DELETE FROM beauty
WHERE phone LIKE '%9';
#2、多表的删除
#案例1:删除张无忌的女朋友的信息
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语句
#案例:将所有男生表删除
TRUNCATE TABLE boys;
/*
delete、truncate的比较【面试题★】
1、删除范围:delete可以删除部分或全部表格,truncate只能删除全部表格
2、能否跟where条件:delete可以,truncate不可以
3、效率:truncate > delete
4、有无返回值:truncate有,delete没有
5、能否回滚:delete可以,truncate不可以
6、若要删除的语句中有自增长列,先删除再插入后,自增长列的值从哪里开始?
delete:从断点开始
truncate:从1开始。
*/
SELECT * FROM boys;
DELETE FROM boys;
INSERT INTO boys (boyname, usercp)
VALUES('张飞', 100), ('刘备', 100), ('关云长', 100);
TRUNCATE TABLE boys;