MySQL
1 where条件查询
从原表中的记录中进行筛选
2 group by 分组查询
很多情况下,用户都需要进行一些汇总操作,比如统计整个公司的人数或者统计每一个部门的人数等。
2.1聚合函数
-
AVG(【DISTINCT】 expr) 返回expr的平均值
-
COUNT(【DISTINCT】 expr)返回expr的非NULL值的数目
-
MIN(【DISTINCT】 expr)返回expr的最小值
-
MAX(【DISTINCT】 expr)返回expr的最大值
-
SUM(【DISTINCT】 expr)返回expr的总和
3 having 筛选
having与where类似,可筛选数据
having与where不同点
-
-
where针对表中的列发挥作用,查询数据;having针对查询结果中的列发挥作用,筛选数据
-
where后面不能写分组函数,而having后面可以使用分组函数
-
having只用于group by分组统计语句
4 order by 排序
5 limit 分页
limit m,n
m表示从下标为m的记录开始查询,第一条记录下标为0,n表示取出n条出来,如果从m开始不够n条了,就有几条取几条。m=(page-1)*n,(page页码,n表示每页显示的条数)
如果第一页limit 0,n <=> limit n
如果第二页limit n,n
依次类推,得出公式limit (page-1)*n , n
-
按一个或多个字段对查询结果进行排序
说明:先按col1排序如果col1相同就按照col2排序,依次类推
col1,col2,col3可以是select后面的字段也可以不是
-
默认是升序,也可以在字段后面加asc显示说明是升序,desc为降序
例如:order by click_count desc;
如果两个字段排序不一样,例如:
order by 字段1 asc ,字段2 desc;
-
order by 后面除了跟1个或多个字段,还可以写表达式,函数,别名等
where 型子查询
where型子查询即把内层sql语句查询的结果作为外层sql查询的条件.
-
子查询要包含在括号内。
-
建议将子查询放在比较条件的右侧。
-
单行操作符对应单行子查询,多行操作符对应多行子查询。
-
单行操作符 右边子查询必须返回的是单个值,单行比较运算符(=,>,>=,<,<=,<>)
多行操作符 右边子查询可以返回多行,但必须是单列,ALL, ANY,IN 其中,ALL和ANY运算符必须与单行比较运算符(=,>,>=,<,<=,<>)结合使用
from型子查询
from型子查询即把内层sql语句查询的结果作为临时表供外层sql语句再次查询.
事务的ACID特性
-
原子性(Atomicity):原子意为最小的粒子,或者说不能再分的事物。数据库事务的不可再分的原则即为原子性。 组成事务的所有SQL必须:要么全部执行,要么全部取消(就像上面的银行例子)。
-
一致性(Consistency):指数据的规则,在事务前/后应保持一致
-
隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的.
-
持久性(Durability):当事务提交完成后,其影响应该保留下来,不能撤消
事务的用法
-
开启事务(start transaction)
-
执行sql操作(普通sql操作)
提交/回滚(commit/rollback)
数据库的隔离级别
对于同时运行的多个事务(多线程并发), 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题: (问题的本质就是线程安全问题,共享数据的问题)
-
脏读: 对于两个事务 T1, T2, T1 读取了已经被 T2 更新但还没有被事务提交
-
不可重复读: 对于两个事务 T1, T2, T1 读取了一个字段, 然后 T2 更新并提交了该字段. 之后, T1再次读取同一个字段, 值就不同了.
-
幻读: 对于两个事务 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入、删除了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出、少了几行.
浙公网安备 33010602011771号