MYSQL之增删改
一、增---insert
1.全量插入,插入的时候必须写入所有的列名并保持顺序
语法 insert into 表名 values(字段值1,字段值2,。。。。字段值n)
举例:新建查询表,insert into tb_userinfo这个表
INSERT into tb_userinfo values(2,'13088884444','1234',0,'China');
2.如果要插入的时可以为空的列,可以使用null插入空值。
在tb_userinfo表查看设计表,sex,address是可以为空值,插入null
insert into tb_userinfo values(3,'13088881111','125',null,null);
3.insert指定列名 ------必须要保持顺序,按照需要插入的列名额顺序插入
指定要插入的列,可以不按照表的顺序,例如:
insert into tb_userinfo(`mobilephone`,`password`,`id`) values('13088886699','127',5);
只要指定列跟后面的插入数值保持一致顺序就ok.
缺点:插入的列多了,容易混淆。
insert into tb_userinfo(`id`,`mobilephone`,`password`) values(4,'13088886666','126');
4.批量插入
insert into tb_userinfo values (5,'13088884441','1234',0,'China'), (6,'13088884442','1234',0,'China'), (7,'13088884443','1234',0,'China');
注:如果批量插入时,id时自增长的,可以直接传null
在设计表中将id设置为【自动增长】---->【保存】,然后批量插入时,id传null
insert into tb_userinfo values (null,'13088884445','1234',0,'China'), (null,'13088884446','1234',0,'China'), (null,'13088884447','1234',0,'China');
总结:一般使用不指定列的方式插入。
二、修改--update
语法:update 表名 set 字段1=新值1,字段2=新值2... where 条件
1.没有where条件的-----危险,用之慎重:会把全表的数据进行修改
update tb_userinfo set `password` = '000';
2.增加where过滤条件
一般update后面的过滤条件按where跟主键,主键的唯一性(不是必须跟主键)
update tb_userinfo set `password` = '999',sex = '1' where id=2;
下面举例不是跟主键约束
update tb_userinfo set `password` = '999',sex = '1' where mobilephone='13088884443';
3.update加过滤条件and-----and,且,所有的过滤条件同时成立
update tb_userinfo set address='korea' where `password` = '999'and sex = '1';
4.update加过滤条件or---只要符合一个就可以修改成功
update tb_userinfo set address='USA' where `password` = '000' or sex = '1' or address = 'China';
三、删除---drop、delete
(一)删库跑路之drop------一般不会用到
删除数据库,删除表
drop database kk; drop database practise1; drop table tb_user;
(二)、删除delete
1.不加约束条件where
删除一行数据,跟update类似,不加约束条件where,会删除全部数据,----危险,慎用!!
delete from tb_userinfo;
2.加约束条件where
delete from tb_userinfo where id = 1;
四、查
(一)、单表查询
1、通配符 *,查询所有的字段
2、过滤条件where
and /or /and + or
3、表取别名 :表名 as 别名 ------------as可以省略
4、不等于的两种方式 != 、<>
##单表查询知识点 --通配符*,可以直接查询这个表 select * from member; select id,`name` from member; --过滤条件 select * from member where `address` = '北京'; --多个条件 and 并且 select * from member where `address` = '北京' and `sex` = 1; --多表可以取别名,单个表就没表取别名了,as可以省略 select * from member as a where a.address= '澳门'; select * from member a where a.address= '澳门'; --多个条件 or 或者 select * from member where `address`='北京' or `name`='王五'; --多个条件 and 和 or 同时存在 select * from member where `address`='北京' and `name`='王五' or `sex` = 0; --不等于 != <>两种方式 select * from member where `sex` != 1; select * from member where `address` <> '北京';
(二)、多表查询
1. 2张表的查询
##多表查询 select * from member a,info b where a.id = b.memberID;
如果不加where过滤条件,就是member表的4条信息,info表的7条信息的笛卡儿积。一共28条。
加上where过滤条件就是在这28条数据种进行过滤。
增加where过滤条件,在上面的结果种筛选出address是北京的所有信息。
select * from member a,info b where a.id = b.memberID and `address`='北京';
2.多张表的多对多的关系
上面查询老师对应教的班级:
select * from S,SC,C where S.S# =SC.S# and SC.C# = C.C#
3.连接查询
(1)内连接----INNER JOIN
这个:select * from member a,info b where a.id = b.memberID;----->是隐性内连接
改成INNER JOIN:两个表之间加上INNER JOIN ,where 改为on
--内连接INNER JOIN select * from member a INNER JOIN info b on a.id = b.memberID and `address`='北京';
(2) 左外连接-----LEFT JOIN
左外连接以左表为主表,主表的所有数据都会显示,右表为从表,从表只有匹配的数据才会显示
语法:select 字段1,字段2 from 表1 LEFT JOIN 表2 on 条件
①在所有字段的基础上查询(*)
--左外连接 select * from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京';
结果显示:主表的数据全部显示出来
②部分指定字段的基础上查询
select a.id,a.name,a.address,b.memberID,b.id from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京';
结果显示:
(3) 右外连接-----RIGHT JOIN
与左连接相反,右外连接以坐表为主表,主表的所有数据都会显示,左表为从表,从表只有匹配的数据才会显示
--右外连接 select a.id,a.name,a.address,b.memberID,b.id from member a RIGHT JOIN info b on a.id =b.memberID and `address` = '北京';
结果:右表数据全部显示
总结:左外连接、右外连接
实际使用,一般会用左外连接就可以了,使用右外连接时,调换左右表的位置即可。
五、查询结果排序----- order by 字段 asc/desc
单表、多表都可以进行排序
1.升序asc,默认的排序就是升序,asc可以不写
--排序 默认时asc,可以不写,desc表示降序 select * from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京' order by a.id asc;
2.降序 desc
可以加几个排序要求
select * from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京' order by a.id asc,b.id desc;
按照前后顺序:a.id升序排序完成,有相同序号的,会依据b.id降序(a.id排序的优先级在前面)