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排序的优先级在前面)