本篇文章,主要对多表查询,事务以及体系结构进行知识总结和学习。
期待和大家一起学习进步。
标量子查询
子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种 子查询称标量子查询。 常用的操作符:=、<>、>、>=、<、<=
列子查询
列子查询返回的结果是一列(可以是多行),这种子查询称为列子查询
常用的操作符: IN 在指定的集合范围之内,多选一 NOT IN 不在指定的集合范围之内 ANY 子查询返回列表中,有任意一个满足即可 SOME 与ANY等同,使用SOME的地方都可以使用ANY ALL 子查询返回列表的所有值都必须满足
行子查询
子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。 常用的操作符:=、<>、IN、NOT、IN
表子查询
子查询返回的结果是多行多列,这种子查询称为表子查询 常用操作符:IN
多表查询小结
多表关系:
一对一:用于表结构拆分,在其中任何一方设置外键(UNIQUE),关联另一方 的主键 多对多:建立中间表,中间表包含两个外键,关联两张表的主键 一对多:在多的一方设置外键,关联一的一方的主键
多表查询:
内连接:
隐式:SELECT 字段列表 FROM 表1,表2 WHERE 条件...; 显示:SELECT 字段列表 FROM 表1[INNER]JOIN表2 ON连接条件...;
外连接:
左外:SELECT 字段列表 FROM 表1 LEFT [OUTER]JOIN表2 ON条件...; 右外:SELECT 字段列表 FROM 表1 RIGHT [OUTER]JOIN表2 ON条件...;
自连接:
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON条件...;
子查询:
标量子查询、列子查询、行子查询、表子查询
事务
简介
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作 为一个整体一起向系统提交或撤销操作请求,即这些操作要么同 时成功,要么同时失败。 默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即 隐式的提交事务。
事务操作
查看/设置事务提交方式 SELECT @@autocomment; SET @@autocomment = 0;
提交事务
COMMENT;
回滚事务
ROLLBACK;
开启事务
START TRANSACTION或BEGIN;
事务四大特性(ACID)
原子性:事务是不可分割的最小分割单元,要么全部成功,要么全部失败。 一致性:事务完成时,必须使所有的数据都保持一致状态。 隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立 环境下运行。 持久性:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
并发事务问题
脏读 :一个事务读到另外一个事务还没有提交的数据。 不可重复读:一个事务先后读取一条记录,但两次读取的数据不同,称之为不可 重复读。 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时, 又发现 这行数据已经存在,好像出现了“幻影”。