Mysql增删改查(DML)
Posted 飞鱼0725
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql增删改查(DML)相关的知识,希望对你有一定的参考价值。
插入记录的两种方法:
插入基本语法一
类别 | 详细解示 |
---|---|
基本语法 | insert into 表 values(值1,值2,值n); |
示例 | INSERT INTO user values(2,‘php中文网‘,‘男‘) |
示例说明 | 向user表中插入值id为2,姓名为李文凯,性别为男 |
插入基本语法二
类别 | 详细解示 |
---|---|
基本语法 | insert into 表(字段1,字段2,字段n) values(值1,值2,值n); |
示例 | INSERT INTO user(id,username,sex) values(213,‘小沈阳‘,1); |
示例说明 | 向user表中插入id为213,username为小沈阳,性别为1 |
说明
基本语法1和基本语法2的区别是:
- 基本语法1的插入语句,表中有多少个字段就必须要插入多少个值。一个不能多,一个也不能少。若有默认值,不想传,可以写上null。
- 基本语法2中,除非有必填字段必须要写入值外。如果有默认值的不想写可以忽略不写。mysql会自动补主默认值。
- 基本语法2中,以user(id,username,sex)字段顺序为值的顺序。
查询
基础查询:select * from 表名;
指定字段查询:select 字段名 from 表名;
查询单个字段不重复记录:select distinct 字段名 from 表名;
条件查询:select 字段名 from 表名 where 条件;
where后可接的条件
比较运算符结果集中将符合条件的记录列出来。上面的例子中,where 后面的田间是一个字段的 ‘=’。
除此之外,还可以使用>、<、>=、<=、!=等比较运算符;
符号 | 说明 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
!= | 不等于 |
= | 等于 |
逻辑运算符
多个条件还可以使用 or 、 and 等逻辑运算符进行多条件联合查询
符号 | 说明 |
---|---|
or | 或者 |
and | 并且 |
我们来看一下多个条件的例子:
类型 | 详细内容 |
---|---|
示例 | select * from money where id <10 and |
说明 | 查询所有字段 要求id小于10 并且province=‘湖北‘ |
mysql> select * from money where id <10 and province=‘湖北‘;
结果集排序
select 字段名 from 表名 order by 字段名 排序关键词;
排序用到的关键词:
关键词 | 说明 |
---|---|
asc | 升序排列,从小到大(默认) |
desc | 降序排列,从大到小 |
结果集限制
对于查询或者排序后的结果集,如果希望只显示一部分而不是显示全部,使用limit关键词限制结果集数量:select 字段名 from 表名 limit 数量;
限制结果集并排序
select 字段名 from 表名 order by 排序关键词 limit 数量;
结果集区间选择
假设我从第0条开始取了3条记录。又想再从第3条开始取3条记录。再想从第6条开始取4条记录怎么办?
select 字段名 from 表名 limit 偏移量,数量;
通过结果集区间的选择,我们可以完成分页。
统计类函数使用
统计类函数最常用的我们有四个:
函数 | 说明 |
---|---|
sum | 求和 |
count | 统计总数 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
注:当然你知道其他的mysql函数也可以使用。不过,在实际工作中,大公司的很多大中型项上很少使用,他们都有专门的计数服务器。因为,mysql的计算量本身很大,为了减少压力通常我们将实际的计算任务交给业务服务器或其他服务器来完成。
分组:select * from 表名 group by 字段名;
在分组基础上进行统计:select * from 表名 group by 字段名 with rollup;
结果再过滤having
having子句与where有相似之处但也有区别,都是设定条件的语句。
having 是筛选组 而where是筛选记录。
多表联合查询
很多时候在实际的业务中我们不只是查询一张表,多张表查询的本质是:表连接。
表连接
当需要查询多个表中的字段时,就可以使用表连接来实现,表连接分为内连接和外连接。
内连接:
- select 表1.字段名[as 别名],表n.字段名 from 表1[别名],表n where 条件;
- select 表1.字段名[as 别名],表n.字段名 from 表1 INNER JOIN 表n on 条件;
外连接:
外连接又分为左连接和右连接,左连接包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录;右连接包含所有的右边表格中的记录甚至是右边表中没有和它匹配的记录。
select 表1.字段名[as 别名],表n.字段名 from 表1 LEFT JOIN 表n on 条件;
select 表1.字段名[as 别名],表n.字段名 from 表1 right JOIN 表n on 条件;
子查询
有时候,当我们查询的时候,需要的条件是另外一个select语句的结果,这时就需要使用子查询。用于子查询的关键字包括in、not in、=、!=、exists、not exists等。
类别 | 详细解示 |
---|---|
基本语法 | select 字段 from 表 where 字段 in(条件) |
示例1 | select * from user where uid in (1,3,4); |
示例1说明 | 按照id 查询指定用户 |
示例2 | select * from user where uid in (select uid from order_goods); |
示例2说明 | 将购买过商品的用户信息显示出来 |
记录联合
使用 union 和 union all 关键字,将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示。两者主要的区别是把结果直接合并在一起,而 union 是将 union all 后的结果进行一次distinct,去除重复记录后的结果。
三、更新记录
update 表名 set 字段1=值1,字段2=值2,字段n=值n where 条件;
同时对两个表进行更新:update 表1 表2 set 字段1=值1,字段2=值2,字段n=值n where 条件;
四、删除记录(注意删除数据时一定要记得备份)
delete from 表名 [where 条件];
清空表记录:delete和truncate是一样的,但它们有一点不同,那就是DELETE可以返回被删除的记录数,而TRUNCATE TABLE返回的是0。语法:truncate table 表名;
以上是关于Mysql增删改查(DML)的主要内容,如果未能解决你的问题,请参考以下文章