#DML:数据操纵语言
/*
插入:insert
修改:update
删除:delete
*/
#一、插入语句
/*
方式一:
语法:
insert into 表名(列1...)
values(值1...)
注意:
可为空的列表数值可以不插入数据,但必须保持列和数值数目相同且一一对应;
可以省略列名,默认为所有列
*/
USE girls;
SELECT * FROM beauty;
#表beauty结构:sex默认为女
CREATE TABLE `beauty` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`sex` CHAR(1) DEFAULT '女',
`borndate` DATETIME DEFAULT '1987-01-01 00:00:00',
`phone` VARCHAR(11) NOT NULL,
`photo` BLOB,
`boyfriend_id` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8
INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'赵丽颖','女','1987-10-13',1123457368234,NULL,5);
#不可以为Null的字段必须插入数值,可以为Null的字段可以不插入数据
INSERT INTO beauty(id,NAME,sex,borndate,phone,boyfriend_id)
VALUES(14,'杨紫','女','1992-10-16',1123457323234,10);
INSERT INTO beauty(id,NAME,phone,boyfriend_id)
VALUES(15,'刘诗诗',13526127635,5);
#省略列名
INSERT INTO beauty VALUES(16,'杨幂','女','1986-09-05',12345678912,NULL,7);
SELECT * FROM boys;
INSERT INTO boys(id,boyName) VALUES(5,'吴奇隆');
INSERT INTO boys(id,boyName) VALUES(6,'冯绍峰');
/*
方式二:
语法:
insert into 表名
set 列名1=值1...
*/
INSERT INTO boys SET id=7,boyName='刘恺威';
INSERT INTO boys SET id=18,boyName='刘亦菲';
#方式一支持多行插入
INSERT INTO boys(id,boyname)
VALUES(9,'关羽'),
(10,'诸葛亮');
#方式一支持子查询
INSERT INTO beauty(id,NAME,phone)
SELECT 17,'宋茜',13572892837;
INSERT INTO beauty(id,NAME)
SELECT id,boyName FROM boys WHERE id = 18;
#二、修改记录:update
/*
1.修改单表的记录
语法:
update 表名
set 列1=值1,列2=值2...
where 筛选条件
2.修改多表的记录【补充】
sql92:
update 表名1 别名1,表名2 别名2
set 列1=值1,...
where 连接条件
and 筛选条件
sql99:
update 表名1 别名1
连接类型 join
表名2 别名2
on 连接条件
set 列1=值1,...
where 筛选条件
*/
#修改单表记录
UPDATE beauty SET boyfriend_id=1 WHERE id IN(6,8,12);
UPDATE beauty SET boyfriend_id=6 WHERE id = 13;
UPDATE beauty SET boyfriend_id=5 WHERE id = 15;
UPDATE beauty SET boyfriend_id=7 WHERE id = 16;
UPDATE beauty SET boyfriend_id=15 WHERE boyfriend_id = 2;
UPDATE boys SET boyName = '刘备',userCP=80 WHERE id =18;
#修改多表记录
#案例1:修改张无忌的女朋友的电话号码是114
#sql92
UPDATE beauty b,boys bo SET b.phone = 114 WHERE b.`boyfriend_id`=bo.id AND bo.`boyName`='张无忌';
SELECT * FROM beauty;
SELECT * FROM boys;
#sql99
UPDATE beauty b INNER JOIN boys bo ON b.`boyfriend_id`=bo.`id` SET b.`phone`=119 WHERE bo.`boyName`='张无忌';
#案例2:修改没有男朋友的女神的男朋友编号都为2号
SELECT * FROM beauty b LEFT JOIN boys bo ON b.`boyfriend_id`=bo.`id` WHERE bo.`id` IS NULL;
UPDATE beauty b LEFT JOIN boys bo ON b.`boyfriend_id`=bo.`id` SET b.`boyfriend_id`=2 WHERE bo.`id` IS NULL;
#三、删除记录
/*
方式一:delete
语法:
删除单表记录:
delete from 表名 where 筛选条件
删除多表记录:
delete 别名 from 表1 别名1,表2 别名2
where 连接条件 and 筛选条件
方式二:truncate
语法:
truncate table 表名:清空表
*/
#删除单表记录
DELETE FROM boys WHERE id=18;
#通过多表删数据
#案例:删除男朋友是张无忌的女神信息
#sql92
USE girls;
DELETE b FROM beauty b,boys bo WHERE b.boyfriend_id = bo.id AND bo.boyName = '张无忌';
#sql99
DELETE b FROM beauty b JOIN boys bo ON b.`boyfriend_id`=bo.`id` WHERE bo.`boyName`='刘恺威';
/*
delete和truncate比较:
1.truncate后面不能加where筛选条件
2.清空表数据,用truncate效率更高
3.如果表中有自增长列:
delete后再插入数据后,自增长列从断点开始;
truncate后再插入数据后,自增长列从1开始
4.truncate删除后没有返回,delete有返回
5.truncate删除不能回滚,delete删除可以回滚
*/