数据操作语言
插入:insert into 表名(列名1,....)values (值1,...);
修改:update 表名 set 列=值
删除:delete from 表名 where 筛选条件
truncate table 表名;不能加条件,整张表删除
1.插入语句
方式一:经典插入
表已经存在了,往里面添加数据
语法:
insert into 表名(列名1,....)
values (值1,...);
注意点:
1.插入值的类型 要与列的类型 一致或 兼容(隐式的转换)例如:列是int可以插入123也可以插入'123'但'john'就不行
2.不可以为null的列必须要插入值
3.可以为空的列插入数据时
①可以写列名插入值为null
②也可以不写列名不写值。有默认值里面就填默认值,没有默认值就为null
插入的顺序和原始表中的顺序
4.列的顺序无所谓,但值要一一对应
5.列和值的个数必须一致
6.省略列名,默认所有列,列的顺序和插入的顺序一致
方式二:
INSERT INTO 表名
set 列名=值,列名=值...
SELECT *
FROM beauty;
#2.可以为null列如何插入值?
#方式1:
INSERT INTO beauty(id,`name`,sex,borndate,phone,photo,boyfriend_id)
VALUES (13,'冈吉里帆','女','1993-1-15','18209943008',NULL,5);
INSERT INTO beauty(id,`name`,sex,borndate,phone,boyfriend_id)
VALUES (14,'桥本环奈','女','1999-2-3','18209943008',5);
INSERT INTO beauty(`name`,sex,id,phone,boyfriend_id,borndate)
VALUES('清野菜名','女',15,'18209943008',5,'1994-10-14')
UPDATE beauty SET borndate='1994-10-14' WHERE id=15;
可以省略列名
INSERT INTO beauty
VALUES(16,'张均甯','女','1982-9-4','18209943008',NULL,5);
方式二:
INSERT INTO beauty
SET id=17,`name`='唐艺昕',sex='女',borndate='1989-12-9',phone='18209943008',boyfriend_id=5;
UPDATE beauty SET borndate='1989-12-9' WHERE id=17;
两种方式pk
方式一支持插入多行,方式二不行
INSERT INTO beauty(id,`name`,sex,borndate,phone,boyfriend_id)
VALUES (18,'桥本环奈1','女','1999-2-3','18209943008',5),
(19,'桥本环奈2','女','1999-2-3','18209943008',5),
(20,'桥本环奈3','女','1999-2-3','18209943008',5);
方式一支持子查询,方式二不支持
INSERT INTO beauty(id,`name`,phone)
SELECT 26,'宋茜','118'
/*
执行的过程:先执行查询语句的到一个结果集,按对应的顺序插入到表中
*/
-- 子查询
-- 含义:出现在其它语句中的select语句,称为子查询或内查询
-- 外部的语句可以是 insert、update、delete、select
INSERT INTO beauty(id,`name`,phone)
SELECT id,boyName,'1118'
FROM boys
WHERE id<26;
2.修改语句
1.修改单标的记录
语法:
update 表名
set 列=值(类型 一致或 兼容(隐式的转换) )
还可以修改多列,中间用逗号隔开
update 表名
set 列=值,列=值....
如果不加筛选条件所有的值都会发生改变
where 筛选条件;
执行顺序是:先找到表名,再筛选,最后修改值
2.修改多表的记录(级联更新)【补充】
#案例:修改beauty表中姓唐的女神的电话为138
UPDATE beauty
SET phone='138'
WHERE `name` LIKE '唐%'
#案例:修改鹿晗的名字,魅力值改为1000
UPDATE boys
SET boyName="张飞",userCP=1000
WHERE id=2;
修改多表的记录,用到了连接
语法:支持92和99
SQL92
update 表1 别名,表2 别名
set 列=值,....
where 连接条件
and 筛选条件
SQL99
update 表1 别名
inner|left|right join 表2 别名
on 连接条件
(以上会形成一个虚拟表)
set 列=值,....
where 筛选条件
#案例:修改张无忌的女朋友的手机号为114
UPDATE boys bo
JOIN beauty b
ON bo.id=b.boyfriend_id
SET b.phone='114'
WHERE bo.boyName='张无忌';
#修改没有男朋友的女神的男朋友编号都为2号
UPDATE boys bo
RIGHT JOIN beauty b
ON bo.id=b.boyfriend_id
SET b.boyfriend_id=2
WHERE bo.id IS NULL;
/*
有的匹配,没有的就为null
*/
3.删除语句
方式一:delete
注意:删除是整行删除
没有筛选一张表都会被删掉
语法:
1.单表删除【主要】
delete from 表名
where 筛选条件
单表删除【主要】
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:删除手机号以9结尾的女神信息
DELETE FROM beauty WHERE phone LIKE '%9';
#案例:删除张无忌的女神信息
DELETE b
FROM beauty b
JOIN boys bo
ON b.boyfriend_id=bo.id
WHERE bo.boyName='张无忌';
#案例:删除黄晓明的信息以及他女朋友的信息
DELETE b,bo
FROM beauty b
JOIN boys bo
ON b.boyfriend_id=bo.id
WHERE bo.boyName='黄晓明';
#方式二:truncate语句
TRUNCATE TABLE admin;
DELETE FROM boys;
TRUNCATE TABLE boys;
INSERT INTO boys(boyName,userCP)
VALUES('张飞',100),('刘备',100),('关羽',100)
单表删除【主要】
delete from 表名
where 筛选条件
limit 条目数
DELETE FROM beauty
WHERE boyfriend_id=2
LIMIT 1;
满足条件删几条,1就是删第一条,2就是删前两条