一、插入
方式一(推荐):
1、列数和值的个数必须一致,且字段类型设置not null的字段必须插入值
2、没有设置not null的字段插入值的方式(比如字段address是可以为null的)
方式①:在字段中写上address字段,在值中写null
insert into user(id,name,address) values(1,'xiaowang',null);
方式②:即在字段中不写address字段,在值中也不写
insert into user(id,name) values(1,'xiaowang');
3、列的顺序可以调换
insert into user(name,id) values('xiaowang',2);
4、可以省略列不写,这时,就默认所有列,且插入值的顺序和表中列的顺序要一致
insert into user values(1,'xiaowang'...);
方式二:
insert into user
set id=1,name='xiaowang';
区别:
1、方式一支持插入多行,方式二不支持
//要求values里的字段个数和类型要和user表的字段和类型一致
insert into user
values
(1,'xiaowang1'),
(2,'xiaowang2'),
(3,'xiaowang3');
2、方式一支持子查询,方式二不支持
//这种情况要求两个表的字段和类型必须对应
insert into user
select * from user2;
//也可以给定插入的字段,这样保证要插入的字段和子查询查出的字段和类型对应即可
insert into user(id,name)
select id,name from user2;//(后面也可以加where、group by、order by等)
二、修改
修改单表:修改id为1的name为xiaoming
update user
set name='xiaoming'
where id=1;
修改多表:修改商品类别为蔬菜的价格统一上涨1倍
update good g
left join type t on g.tid=t.id
set g.price=g.price*2
where t.name='蔬菜';
三、删除
方式一用 delete:
案例1:单表删除----删除id为1的数据
delete from user where id=1;
案例2:多表删除----删除类别为蔬菜的所有商品
delete g
from good g
left join type t on g.tid=t.id
where t.name='蔬菜';
案例3:多表删除----删除类别为蔬菜的所有商品和类别蔬菜
//注意:如果指定删除的类别下没有对应的商品,则该类别也不会被删除,因为没有查出数据
delete g,t
from good g
left join type t on g.tid=t.id
where t.name='蔬菜';
//解决办法:主要想删除的表当做主表delete g,t(此时以类别表为主表,则该类别下没有商品也会删除该类别的数据,因为只要指定的类别存在,就会返回指定类别的数据)
from good g
right join type t on g.tid=t.id
where t.name='蔬菜';
方式二用truncate:
不能加where条件,因此也称为清空;
truncate table user;
方式一delete和方式二truncate区别:
1、delete可以加where条件,支持多表删除
2、truncate效率要高
3、加入要删除表中有自增长的列,如果用delete删除后,再插入数据,自增长列的值从断点开始(比如删除了自增长列值为2的数据,再插入数据,自增长列从3开始),而truncate清空表后,再插入值,自增列值从1开始(可以看做新建了一张同样的表)
4、truncate删除没有返回值,delete有返回值,返回删除的行数
5、truncate不可以回滚(不可以用在事务中),delete删除可以回滚(可以用在事务中)