DML语言

数据操作语言

插入: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就是删前两条
原文地址:https://www.cnblogs.com/rijiyuelei/p/12380298.html