MySQL

  • select的5个子句

   

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

  • 按一个或多个字段对查询结果进行排序

用法:order by col1,col2,col3...

说明:先按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 更新但还没有被事务提交的字段. 之后, 若 T2 回滚事务, T1读取的内容就是临时且无效的.

  • 不可重复读: 对于两个事务 T1, T2, T1 读取了一个字段, 然后 T2 更新并提交了该字段. 之后, T1再次读取同一个字段, 值就不同了.

  • 幻读: 对于两个事务 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入、删除了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出、少了几行.

 

posted @ 2020-10-21 20:52  罐装  阅读(80)  评论(0)    收藏  举报