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)

posted @ 2020-10-22 20:03  TSBadBoy  阅读(96)  评论(0编辑  收藏  举报