我是靠谱客的博主 欣慰铅笔,最近开发中收集的这篇文章主要介绍MySQL事务,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MySQL事务主要用于处理操作量大、复杂度高的数据(如:在数人员管理系统中,删除某个人的基本信息的同时,也要删除其相关的信息)。这样,有一条条数据库操作语句就构成了事务。

MySQL数据库中只有使用的是 innoDB存储引擎 的表才支持 事务。
事务可用来维护数据库的完整性,sql语句要么都执行完成,要么不执行。
事务用来管理delete、insert、update语句。

一、事务需要满足的4个条件(ACID):
1、原子性(Atomicity,或称不可分割性):一个事务(transaction)要么全部执行完成,要么都不完成,不会结束在中间某段。如果在执行的过程中出错,会执行回滚(rollback)到事务开始前状态。
2、一致性(Consistency):在事务开始之前到事务结束之后,数据库的完整性没有遭到破坏。这表示写入的资料必须完全符合所有的预设规则,这包括资料的精确度、串联性以及后续数据库可以自发的完成预设任务。
3、隔离性(Isolation):隔离性允许事务可以并发的对数据库进行读写和修改能力,隔离性可以防止由于多个事务的并发交叉执行导致的数据结果不一致。

隔离性分为:
读为未提交(Read uncommitted)、读已提交(Read committed)、
可重复读(Repeatableread)、串行化(Serializable)

4、持久性(Durablity):事务处理后,对数据的修改是永久的。

二、事务控制语句

MySQL默认是自动提交事务的,既在执行sql语句之后会马上自动执行COMMIT操作。
SET AUTOCOMMIT=0 关闭自动提交。
SET AUTOCOMMIT=1 开启自动提交。

1、显示的开启一个事务
BEGIN或START TRANSACTION

2、提交保存事务
COMMIT 或 COMMIT WORK

3、事务回滚,返回事务开始之前
ROLLBACK

ROLLBACK或COMMIT都会结束事务

4、创建一个保存点
SAVEPOINT 保存点名

事务可以有多个保存点

5、回滚到保存点
ROLLBACK TO 保存点名

如果有多个保存点,当回滚到某个保存点后,之后的保存点都不再存在。

6、删除保存点
RELEASE SAVEPOINT 保存点名

如果保存点不存在,会产生异常。

7、查询事务的隔离级别
show variables like ‘t_isolation’

8、设置事务隔离级别
set session transaction isolation level 级别名

三、脏读、不可重复读、幻读、第一类丢失更新、第二类丢失更新

1、脏读
事务A读到(就是select语句)事务B 尚未提交的修改(insert、delete、update)。脏读的后果:事务A读到事务B做的修改,如果事务B发生事务回滚,则事务A读取到的就是垃圾数据。(注:脏读的后果很严重)

2、不可重复读
同一个事务再次读取数据时,与之前读取到的数据不一致。(注:如果允许不重复读,则读取到的数据是不确定的。)

3、虚读
事务A读取到where子句指定的数据,事务B加入了一行与事务A的where条件一样的数据。然后事务A再次使用相同的查询条件读取,此时事务A看到的可能就是事务B所添加的。

4、第一类丢失更新
撤销一个事务时, 把其他事务已经提交的更新数据覆盖(此情况在事务中不可能出现, 因为一个事务中修改时此记录已加锁, 必须等待此事务完成后另一个事务才可以继续UPDATE)

5、第二类丢失更新
这是不可重复读中的特例, 一个事务覆盖另一个事务已提交的更新数据

四、隔离级别
1、读未提交(read uncommitted)
读取尚未提交的数据,哪一个问题都不能解决。

2、读已提交(read committed)
读取已经提交的数据,可以解决脏读。(oracle默认)

3、可重复读(repeatable read)
可以解决脏读和不重复读取。(mysql默认)

4、串行化(serializable)
可以解决脏读、不重复读、虚读。(相当于锁表)

最后

以上就是欣慰铅笔为你收集整理的MySQL事务的全部内容,希望文章能够帮你解决MySQL事务所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部