文章目录
一.插入
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删除可以回滚.