mysql:DML数据的增删改

一.插入

1.方式一

语法:
insert into 表名(列名,…) values(值1,…);
注意点:
1)当不写列名的时候,默认为表中全部字段,并且顺序和表中的顺序一致。(如果是自己写列名,那么顺序可以和表中的不一致)
2)列的个数必须和值的个数是一样的
3)不可以为null的字段(比如设为primary key的字段,或者约束为not null的字段)必须有具体值插入。可以为null的字段,如果前面没有写出列名,那么后面写值的时候就可以不写;如果前面写了列名,那么后面的值可以写null,也可以写具体值。

CREATE TABLE IF NOT EXISTS my_idol(
NAME VARCHAR(20) NOT NULL,
age INT,
height INT,
hometown VARCHAR(20)
);

INSERT INTO my_idol(NAME,hometown,age) VALUES('wyb','HeNan province',22);
SELECT * FROM my_idol;

在这里插入图片描述

2.方式二

语法:
insert into 表名
set 列名=值,列名=值…;

INSERT INTO my_idol
SET NAME='xz',age=29,hometown='ChongQing';

SELECT * FROM my_idol;

在这里插入图片描述

3.两种方式的比较

1)方式一可以插入多条记录,方式二不行

INSERT INTO my_idol
VALUES
('hjy',28,187,'LiaoNing province'),
('zql',NULL,180,'ChangBaiShan');

SELECT * FROM my_idol;

在这里插入图片描述

2)方式一可以插入子查询的结果,方式二不行

CREATE TABLE IF NOT EXISTS other(
NAME VARCHAR(20),
age INT
);
INSERT INTO other VALUES('lyf',31);

INSERT INTO my_idol(NAME,age)
SELECT * FROM other; #将other表中的所有数据插入到my_idol表中

SELECT * FROM my_idol;

二.修改

1.修改只涉及单表

语法:
update 表名
set 列名=值
【where 筛选条件】
PS:如果不加筛选条件,那么就会把所有记录的该字段修改成你指定的那个值

#案例:my_idol表中年龄大于25的,都减去1岁
UPDATE my_idol
SET age = age-1
WHERE age>25;

SELECT * FROM my_idol;

在这里插入图片描述

#案例:把wyb的身高改为180
UPDATE my_idol
SET height=180
WHERE NAME='wyb';

SELECT * FROM my_idol;

在这里插入图片描述

2.修改涉及多表

语法:
update 表1 【as 别名1】
inner|left|right join 表2 【as 别名2】
on 连接条件
set 列名=值,列名=值…
where 筛选条件

CREATE TABLE IF NOT EXISTS idol_id(
id INT,
NAME VARCHAR(20)
);
INSERT INTO idol_id
VALUES
(1,'wyb'),
(2,'xz'),
(3,'hjy'),
(4,'zql');

#案例:把idol_id为1的身高改成181
UPDATE my_idol AS info
JOIN idol_id AS id
ON info.`name` = id.`name`
SET height=181
WHERE id.`id` = 1;

SELECT * FROM my_idol;

在这里插入图片描述

#案例:把idol_id大于1的,年龄全部改成29
UPDATE my_idol
JOIN idol_id
ON my_idol.`name` = idol_id.`name`
SET  age=29 #只修改一个表中的记录
WHERE idol_id.`id`>1;

SELECT * FROM my_idol;

在这里插入图片描述

#案例:把idol_id 为1的人,在my_idol表中的name改成eb,在idol_id表中的名字改成web
UPDATE my_idol AS t1
JOIN idol_id AS t2
ON t1.`name` = t2.`name`
SET t1.`name` = 'eb', t2.`name` = 'web' #修改了两个表中的记录
WHERE t2.`id`=1;
SELECT * FROM my_idol;
SELECT * FROM idol_id;

在这里插入图片描述
在这里插入图片描述

三.删除

1.方式一:delete

1.1 删除只涉及单表

语法:
delete from 表名
【where 筛选条件】
PS:如果不加筛选条件,那么就把该表中的所有记录删掉

#案例:删除my_idol中name为'lyf'的记录
DELETE FROM my_idol
WHERE NAME = 'lyf';

SELECT * FROM  my_idol;

在这里插入图片描述

1.2 删除涉及多表

语法:
delete 要删除的表
from 表1 【as 别名1】
inner|left|right join 表2 【as 别名2】
where 筛选条件

#案例:删除idol_id为4的人在my_idol中的记录
DELETE my_idol #即只删除在my_idol中的记录,idol_id中的记录不删除
FROM my_idol
JOIN idol_id
ON my_idol.`name` =  idol_id.`name`
WHERE idol_id.`id`=4;
SELECT * FROM my_idol;

在这里插入图片描述

#案例:把idol_id为3的人记录从两张表中都删除
DELETE my_idol,idol_id #即两张表中涉及的记录都删除
FROM my_idol
JOIN  idol_id
ON my_idol.`name` = idol_id.`name`
WHERE idol_id.`id` = 3;
SELECT * FROM my_idol;

在这里插入图片描述
在这里插入图片描述

2.方式二:truncate

truncate 只能是删除表中所有记录
语法:
truncate table 表名

TRUNCATE TABLE idol_id;
SELECT * FROM idol_id;

在这里插入图片描述

3.delete/truncate 删除全表记录对比

1).delete 可以加where 条件,truncate不能加
2).truncate删除,效率高一丢丢
3).假如要删除的表中有自增长列,如果用delete删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的值从1开始。
4).truncate删除没有返回值,delete删除有返回值
5).truncate删除不能回滚,delete删除可以回滚.

发布了43 篇原创文章 · 获赞 1 · 访问量 735

猜你喜欢

转载自blog.csdn.net/weixin_41391619/article/details/105022230