事务与查询
DCL用来控制数据库的访问,包括如下SQL语句:
-
GRANT:授予访问权限
-
REVOKE:撤销访问权限
-
COMMIT:提交事务处理
-
ROLLBACK:事务处理回退
-
SAVEPOINT:设置保存点
-
LOCK:对数据库的特定部分进行锁定
事务的ACID特性
-
原子性(Atomicity):原子意为最小的粒子,或者说不能再分的事物。数据库事务的不可再分的原则即为原子性。 组成事务的所有SQL必须:要么全部执行,要么全部取消(就像上面的银行例子)。
-
一致性(Consistency):指数据的规则,在事务前/后应保持一致
-
隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的.
-
持久性(Durability):当事务提交完成后,其影响应该保留下来,不能撤消
对于同时运行的多个事务(多线程并发), 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题: (问题的本质就是线程安全问题,共享数据的问题)
-
脏读: 对于两个事务 T1, T2, T1 读取了已经被 T2 更新但还没有被事务提交的字段. 之后, 若 T2 回滚事务, T1读取的内容就是临时且无效的.
-
不可重复读
-
幻读: 对于两个事务 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入、删除了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出、少了几行.
- 序列化
关联查询一共有几种情况:
-
内连接:INNER JOIN 、CROSS JOIN
-
外连接:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)、全外连接(FULL OUTER JOIN)
-
自连接:当table1和table2本质上是同一张表,只是用取别名的方式虚拟成两张表以代表不同的意义
说明:
(1)连接 n个表,至少需要 n-1个连接条件。 例如:连接三个表,至少需要两个连接条件。
(2)当两个关联查询的表如果有字段名字相同,并且要查询中涉及该关联字段,那么需要使用表名前缀加以区分
(3)当如果表名比较长时,可以给表取别名,简化SQL语句
笛卡尔积
定义:将两(或多)个表的所有行进行组合,连接后的行数为两(或多)个表的乘积数.
在MySQL中如下情况会出现笛卡尔积,主要是因为缺少关联条件或者关联条件不准确
注:外连接必须写关联条件,否则报语法错误
关联条件
-
WHERE:适用于所有关联查询
-
ON:只能和JOIN一起使用,只能写关联条件。虽然关联条件可以并到WHERE中和其他条件一起写,但分开写可读性更好。
-
USING:只能和JOIN一起使用,而且要求两个关联字段在关联表中名称一致,而且只能表示关联字段值相等
内连接(INNER JOIN)
有两种,显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行
格式:
隐式:SELECT [cols_list] from 表1,表2 where [condition]
显式:SELECT [cols_list] from 表1 INNER JOIN 表2 ON [关联条件] where [其他筛选条件]
SELECT [cols_list] from 表1 CROSS JOIN 表2 ON [关联条件] where [其他筛选条件]
SELECT [cols_list] from 表1 JOIN 表2 ON [关联条件] where [其他筛选条件]
外连接(OUTER JOIN)
外连接分为:
左外连接(LEFT OUTER JOIN),简称左连接(LEFT JOIN)
右外连接(RIGHT OUTER JOIN),简称右连接(RIGHT JOIN)
全外连接(FULL OUTER JOIN),简称全连接(FULL JOIN)
select的5个子句
4.1 where条件查询
从原表中的记录中进行筛选
4.2 group by 分组查询
很多情况下,用户都需要进行一些汇总操作,比如统计整个公司的人数或者统计每一个部门的人数等。
4.2.1聚合函数
-
AVG(【DISTINCT】 expr) 返回expr的平均值
-
COUNT(【DISTINCT】 expr)返回expr的非NULL值的数目
-
MIN(【DISTINCT】 expr)返回expr的最小值
-
MAX(【DISTINCT】 expr)返回expr的最大值
-
SUM(【DISTINCT】 expr)返回expr的总和
having 筛选
having与where类似,可筛选数据
having与where不同点
-
-
where针对表中的列发挥作用,查询数据;having针对查询结果中的列发挥作用,筛选数据
-
where后面不能写分组函数,而having后面可以使用分组函数
-
having只用于group by分组统计语句
-

浙公网安备 33010602011771号