一、事务

事务就是一组DML(数据操作)语句,这些语句在逻辑上存在相关性,要么全部执行成功,要么全部失败,是一个整体。

1、事务的基本操作:

  • 开始一个事务:start transaction
  • 创建一个保存点:savepoint 保存点名;
  • 回到保存点:rollback to 保存点名。

2、事务操作注意事项:

  • 没有设置保存点,也可以回滚。只能回滚到事务的开始,直接使用rollback(前提是事务还没有提交)。
  • 事务提交(commit)后不可以回滚
  • InnoDB支持事务,而MyISAM不支持事务

3、无隔离会产生以下问题:

  • 更新丢失:两个事务同时修改一个数据,一个事务的更新覆盖了另外一个事务的更新结果。
  • 脏读:一个事务对数据修改后还没有提交,此时另外的事务读取了这个数据。
  • 不可重复读:在同一事务中多次读取同一数据得到不同结果,这可能是读取过程中有另外的事务修改了数据。
  • 幻读:第一个事务对涉及全表的数据进行修改,此时,另外的事务也修改表中的数据(如插入一行新数据),就会导致第一个事务操作完发现还有未修改的,就好像发生幻觉一样。

4、事务的隔离级别(4种)

隔离级别

脏读

不可重复读

幻读

加锁读

读未提交(read uncommited)

不加锁

读已提交(read commited)

X



不加锁

可重复读(repeatable read)

X

X


不加锁

可串行化(serializable)

X

X

X

加锁

  • 对号()表示会出现的情况,错号(X)表示不会出现的情况。
  • MySQL中默认的隔离级别是可重复读。

5、事务的ACID特性

  • 原子性(Atomicity):事务是应用中最小的执行单位,要么全部成功,要不失败回滚,对数据库不能产生影响。
  • 一致性(Consistency):事务执行的结果,是使数据库从一个一致性状态到另外一个一致性状态。
  • 隔离性(isolation):各个事务的执行互不干扰,任意一个事务的内部操作对其他并发事务都是隔离的。
  • 持久性(Durability):一个事务一旦提交,对数据库所做的改变是永久的

二、数据库内连、外连

表的连接可分为内连接和外连接,其中外连又分为左外连接和右外连接。

下面通过创建一张简单student(id int, name varchar(20))表,一张score(id int, sum double)来具体展示。

1、内连接

select 字段  from  表1  inner join 表2  on  连接条件  and  其他条件

mysql事务 创建记录 保证唯一性 mysql事务保存点_mysql事务 创建记录 保证唯一性

2、左外连接

联合查询中左表完全显示,右表不足的地方全部为null。

select  字段名  from  表名1  left  join  表名2  on  连接条件

mysql事务 创建记录 保证唯一性 mysql事务保存点_MySQL数据库事务_02

3、右外连接

联合查询中右表完全显示,左表不足的地方全部为null。

select  字段名  from 表名1 right  join  表名2  on  连接条件

mysql事务 创建记录 保证唯一性 mysql事务保存点_mysql事务 创建记录 保证唯一性_03