MySQL 关联、联合查询,事务ACID见解
MySQL 关联、联合查询,事务ACID见解
1、关联查询分为几种情况:
1.1、内连接:
1.1.1、INNER JOIN
INNER JOIN 产生的结果是两个表的交集
1.1.2、CROSS JOIN
CROSS JOIN 把两个表的数据进行一个N*M的组合,即笛卡尔积。在开发过程中我们肯定是要过滤数据,所以这种很少用。
1.2、外连接:
1.2.1、左外连接(LEFT OUTER JOIN)
LEFT [OUTER] JOIN 产生第一个表的完全集,而第二个表中有匹配的则有值,没有匹配的则以null值取代。
1.2.2、右外连接(RIGHT OUTER JOIN)
RIGHT [OUTER] JOIN 产生第二个表的完全集,而第一个表中有匹配的则有值,没有匹配的则以null值取代。
1.2.3、全外连接(FULL OUTER JOIN)
FULL [OUTER] JOIN 产生两个表的并集。对于没有匹配的记录,则会以null做为值。
1.3、自连接:
假设在【成绩表】有【主键ID】【学生姓名】【课程名称】【成绩】等字段。
现在要查询 “语文成绩>=数学成绩”的学生姓名,这时就可以使用自连接查询:
select 【学生姓名】
from 【成绩表】 AS a,【成绩表】 AS b
where a.【主键ID】=b.【主键ID】
and a.【成绩】>=b.【成绩】
and a.【课程名称】='语文'
and b.【课程名称】=数学
自连接是指使用表的别名实现表与其自身连接的查询方法。
2、联合查询一般是指:
将两个或两个以上SELECT语句的查询结果集合合并成一个结果集合显示。涉及到UNION运算符
3、关连查询主要是指:
2个或以上的表通过外键等方式进行关联,进而查询出自己需要的内容
举个例子:
select * from table1 a,table 2 b
where a.name=b.name;
以上是个人见解 如有错误 请各位大神指正
4、事务
4.1、事务四点见解
一个支持事务的数据库必须要有这四种特性,不然在处理事务过程中无法保证数据库中数据的正确性、准确性,在一点情况下达不到双方的要求。
4.1.1、原子性【Atomicity】
非常强硬的告诉你在数据库数据中要不就全部成功完成,要不就全部不成功完成,不存在卡壳在中间的过程中,存在的特性就是,在事务处理、运行中出现错误后会回滚到没开始事务的时候,就是说回滚后就如同一个新的一样,从没执行过一样。
4.1.2、一致性【Consistency】
不管在事务是否在执行还是不在执行,不管有多少事务同时执行它们的状态是统一的,就拿买西瓜为例子,有三个卖西瓜的,每个卖家都有10个西瓜,每个西瓜10块钱,买西瓜的有300块钱,他将三个卖西瓜的西瓜全买了,这个时候卖西瓜的三个人就各有等价的100元,买西瓜的有价值300元的西瓜。
总价是不变的 总共是30个西瓜,300元钱,只是换了主人。
存在的特性就是保护以及不变性!!!
4.1.3、隔离性【Isolation】
隔离性从名字就可以看出来具体的意思,咱们处理事务的时候可能同时处理很多,不注意就可能混淆了,而为了处理这种情况就会将事务进行串行化或者序列化请求,好让数据库在同一时间仅有一个请求用于同一数据。
4.1.4、持久性【Durability】
持久啊,男人很熟悉的两个字,在事务指的意思可是大不相同,但效果是同样的,当事务在数据库中操作后所做的变动持久化的保留在数据库当中,不会出现回滚情况。
4.2、事务操作用法
4.2.1、启动事务(start transaction/begin)
4.2.2、mysql需求操作
4.2.3、成功提交,失败回滚(commit/rollback)