第二章 DML语言
/*
数据操作语言:
插入 insert
修改 update
删除 delete
*/
一、插入语句
1、方式一:经典方式
/*
语法:
insert into 表名(列名,...) values(值1,...)
*/
SELECT * FROM beauty
SELECT * FROM boys
(1)插入的值类型要与列的类型一致或兼容
INSERT INTO beauty(id,name,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1987-10-9','18209179777',NULL,5);
INSERT INTO boys(id,boyName,userCP) VALUES(5,'张若昀',700);
(2)不可以为null的列必须插入值,可以为null的列如何插入值?
#字段和个数可以和原始表的字段和个数不一致
#方式一:字段写上,值使用NULL
INSERT INTO beauty(id,name,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1987-10-9','18209179777',NULL,5);
#方式二:字段和值都省略
INSERT INTO beauty(id,name,sex,borndate,phone)
VALUES(14,'王鸥','女','1982-10-28','18209177777');
(3)列的顺序是否可以调换
INSERT INTO beauty(id,borndate,phone,name,sex)
VALUES(15,'1981-6-3','18209172777','杨蓉','女');
(4)列数和值个数必须一致
INSERT INTO beauty(id,name,sex,phone)
VALUES(16,'吴昕','女','1982-10-28','18209177777');
(5)可以省略列名,默认所以列,而且列的顺序和表的列顺序一致
INSERT INTO beauty
VALUES(16,'吴昕','女','1983-1-29','18209379777',NULL,NULL);
2、方式二
/*
语法:
insert into 表名
set 列名=值,列名=值,....
*/
INSERT INTO beauty
SET id=17,`name`='戚薇',sex='女',phone='18238976545';
3、两种方式对比
(1)方式一支持插入多行,方式二不支持
INSERT INTO boys
VALUES(6,'何炅',NULL), (7,'撒贝宁',NULL), (8,'魏晨',NULL),
(9,'白敬亭',NULL),(10,'大张伟',NULL),(11,'刘昊然',NULL);
(2)方式一支持子查询,方式二不支持
INSERT INTO boys(id,boyName,userCP)
SELECT 12,'魏大勋',NULL UNION
13,'测试',NULL;
二、修改语句
/*
1、修改单表的记录*
语法:
update 表名
set 列名=新值,列名=新值,...
where 筛选条件;
2、修改多表的记录(级联更新)
sql92语法:
update 表1 别名,表2 别名
set 列= 值,...
where 连接条件
and 筛选条件
sql99语法:
update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 列= 值,...
where 筛选条件
*/
1、修改单表的记录
SELECT * FROM beauty
SELECT * FROM boys
#案例:修改beauty表中ID为18的女神姓名
UPDATE beauty SET `name`='测试' WHERE id=18;
2、修改多表的记录(级联更新)
#案例:修改张无忌的女朋友的手机号为18276540114
UPDATE boys b INNER JOIN beauty g ON b.id=g.boyfriend_id
SET g.phone='18276540114' WHERE b.boyName = '张无忌';
#案例:修改没有男朋友的女神的男朋友编号为13号
UPDATE beauty g LEFT JOIN boys b ON b.id=g.boyfriend_id
SET g.boyfriend_id = 13 WHERE b.id IS NULL;
三、删除语句
/*
方式一:delete
1、单表的删除*
语法:
delete from 表名 where 筛选条件 【limit 条目数】;
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 表名;
两种方式对比:
1、delete 可以加where条件,truncate不能加
2、truncate删除,效果高一些
3、假如要删除的表中有自增长列:
用delete删除后,自增长列的值从断点开始,
用truncate删除后,再插入数据,自增长列的值从1开始
4、truncate删除没有返回值,delete删除有返回值
5、truncate删除不能回滚,delete删除可以回滚
*/
1、方式一:delete
(1)单表的删除
SELECT * FROM beauty;
SELECT * FROM boys;
#案例:删除手机号以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='黄晓明';
2、 方式二:truncate
#案例:将boys表信息删除
TRUNCATE TABLE boys;
====================================================
分享,多担待。望有帮助