MySQL源码
库和表

myemployees表

girls表

student表

DML
insert
#DML
/*
数据操作语言
插入:insert
修改:update
删除:delete
*/
#一、插入
#方式一
/*
语法:
insert into 表名(列名1, ...) values(值1, ...) ;
注意:
(1)插入值的类型要与列的类型一致或兼容
(2)为可以为null的列赋值
方式1:表名中书写该字段,赋值时赋null,如#1
方式2:表名中不写该字段,赋值时不赋值
(3)列的顺序可以调换,只需列名与值对应即可
(4)列数和值的个数必须一致
(5)可以省略列名,此时默认要为所有列赋值,顺序要与表中字段的顺序一致,且不能改变
*/
#1.插入值的类型要与列的类型一致或兼容
INSERT INTO beauty (
id,
NAME,
sex,
borndate,
phone,
photo,
boyfriend_id
)
VALUES
(
13,
'唐艺昕',
'女',
'1990-4-23',
'18912341234',
NULL,
2
) ;
#2.为可以为null的列赋值
#方式1:表名中书写该字段,赋值时赋null,如#1
#方式2:表名中不写该字段,赋值时不赋值
INSERT INTO beauty (id, NAME, sex, phone)
VALUES
(14, '金星', '女', '18315341734') ;
#3.列的顺序可以调换,只需列名与值对应即可
INSERT INTO beauty (NAME, id, sex, phone)
VALUES
(
'刘亦菲',
'15',
'女',
'18315341734'
) ;
#4.列数和值的个数必须一致
#5.可以省略列名,此时默认要为所有列赋值,顺序要与表中字段的顺序一致,且不能改变
INSERT INTO beauty
VALUES
(
16,
'娜扎',
'女',
NULL,
'17922200199',
NULL,
NULL
) ;
#方式二
/*
语法:
insert into 表名 set 列名1=值1, 列名2=值2, ... ;
*/
#1.
INSERT INTO beauty SET id = 17,
NAME = '张惠妹',
sex = '女',
borndate = NULL,
photo = NULL,
phone = '123',
boyfriend_id = NULL ;
#2.
INSERT INTO beauty SET id = 18,
NAME = '刘涛',
sex = '女',
phone = '999' ;
#两种插入方法的比较
/*
1.方式一支持一次插入多行,如
insert into 表名(列1, 列2, ...)
values(值1, 值2, ...),
(值1, 值2, ...),
(值1, 值2, ...);
2.方式一支持子查询,如
insert into beauty(id, name, phone)
select 26, '朱茵', '345';
结果是插入id=26的改数据
insert into beauty(id, name, phone)
select id, boyName, '121'
from boys
where id > 3 ;
在beauty表中插入boys表中所有id>3的数据
*/
update
#二、修改
/*
1.修改单表记录:
语法:
update 表名 set 列名1=值1, 列名2=值2, ...
where 筛选条件 ;
2.修改多表记录(级联更新):
语法:
sql92:
update 表1 别名, 表2 别名
set 列名1=值1, 列名2=值2, ...
where 连接条件
and 筛选条件 ;
sql99:
update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 列名1=值1, 列名2=值2, ...
where 筛选条件 ;
*/
#1.修改单表记录
#案例1:修改beauty表中姓唐的电话为12345
UPDATE
beauty
SET
phone = '12345'
WHERE NAME LIKE '唐%' ;
#案例2:修改boys表中id为2的名称为张飞,魅力值为10
UPDATE
boys
SET
boyName = '张飞',
userCP = 10
WHERE id = 2 ;
#2.修改多表记录
#案例1:修改张无忌女朋友的手机号为789
UPDATE
beauty be
INNER JOIN boys bo
ON be.`boyfriend_id` = bo.`id` SET be.`phone` = '789'
WHERE bo.`boyName` = '张无忌' ;
#案例2:修改没有男朋友的女性的男朋友编号为2
UPDATE
beauty be
LEFT JOIN boys bo
ON be.`boyfriend_id` = bo.`id` SET be.`boyfriend_id` = 2
WHERE bo.`id` IS NULL ;
#案例2:修改没有男朋友的女性的男朋友编号为张飞的编号
#(1)查询张飞的编号
SELECT
id
FROM
boys
WHERE boyName = '张飞' ;
#(2)查询结果
UPDATE
beauty be
LEFT JOIN boys bo
ON be.`boyfriend_id` = bo.`id` SET be.`boyfriend_id` =
(SELECT
id
FROM
boys
WHERE boyName = '张飞')
WHERE bo.`id` IS NULL ;
delete
#三、删除
/*
方式一:delete
语法:
1.单表删除:
delete from 表名 where 筛选条件 ;
2.多表删除:
sql92:
delete 表的别名 —— 删除哪个表中的数据,就写哪个表的别名
from 表1 别名, 表2 别名
where 连接条件
and 筛选条件 ;
sql99:
delete 表的别名
from 表1 别名
inner|left|right 表2 别名
on 连接条件
where 筛选条件 ;
方式二:truncate —— 删除整张表,清空数据
语法:
truncate table 表名 ;
*/
#方式一:delete
#1.单表删除
#案例:删除手机尾号为9的女性信息
DELETE
FROM
beauty
WHERE phone LIKE '%9' ;
#2.多表删除
#案例1:删除张无忌的女朋友的信息
#方法1:
DELETE
be #只删除beauty表中的数据
FROM
beauty be
INNER JOIN boys bo
ON be.`boyfriend_id` = bo.`id`
WHERE bo.`boyName` = '张无忌' ;
#方法2:
#(1)查询张无忌的id
SELECT
id
FROM
boys
WHERE boyName = '张无忌' ;
#(2)删除boyfriend_id为(1)的女性信息
DELETE
FROM
beauty be
WHERE be.boyfriend_id =
(SELECT
id
FROM
boys
WHERE boyName = '张无忌') ;
#案例2:删除黄晓明以及其女朋友的信息
DELETE
be,
bo #两个表中相对应的数据都删除
FROM
beauty be
INNER JOIN boys bo
ON be.`boyfriend_id` = bo.`id`
WHERE bo.`boyName` = '黄晓明' ;
#delete与truncate比较 **
/*
1.delete可以添加where筛选条件,而truncate不可以
2.truncate效率更高,但使用受限
3.若要删除的表中有自增长列,使用delete删除后,再插入数据,自增长列的值从断点开始;
若使用truncate删除,再插入数据,自增长列的值从1开始(delete删除整张表时也符合该规律)
4.truncate删除没有返回值,delete删除有返回值(返回几行删除成功)
5.truncate删除不能回滚,delete删除可以回滚
*/
本文详细介绍了MySQL中DML操作,包括如何使用INSERT进行数据插入,通过SET或直接指定列名及值的方式;UPDATE语句用于更新表中的记录,涉及单表和多表的更新操作;DELETE语句用于删除记录,对比了DELETE与TRUNCATE的区别。此外,还展示了各种实际操作示例。

317

被折叠的 条评论
为什么被折叠?



