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就是删前两条
今天比昨天晚,却比明天早