MySQL 11:事务(重点)
·

1.事务的概念
事务把一组SQL语句(一条/多条)打包成为一个整体,在这组SQL的执行过程中,要么全部成功,要么全部失败。
2.事务的ACID特性(面试题)

原子性:一个事务中的所有操作,要么全部成功,要么全部失败,不会出现只执行了一半的情况。如果事务在执行过程中发生错误,会回滚( Rollback )到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性不会被破坏。这表示写入的数据必须完全符合所有的预设规则,包括数据的精度、关联性以及关于事务执行过程中服务器崩溃后如何恢复。
隔离性:数据库允许多个并发事务同时对数据进行读写和修改,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务可以指定不同的隔离级别,以权衡在不同的应用场景下数据库性能和安全。
持久性:事务处理结束后,对数据的修改将永久的写入存储介质,即便系统故障也不会丢失。

3.举例
转账的例子


4.使用事务
4.1 查看支持事务的存储引擎

4.2 语法


4.3 自动/手动提交事务

4.4 开启一个事务,执行修改后回滚
回滚( Rollback )会回到到事务开始前的状态


4.5 开启一个事务,执行修改后提交
事务提交前修改可能丢失,但提交后修改才永久生效(数据已经安全地到达磁盘,不再依赖内存),且此时从任何客户端查询该表,才能看已经持久化到磁盘的最新数据。


4.6 保存点
在事务执行的过程中设置保存点(存档),回滚时指定保存点可以把数据恢复到保存点的状态。

5.事务的隔离性和隔离级别
5.1 什么是隔离性

5.2 隔离级别(性能与安全)



读未提交【正常情况下应该避免使用这种隔离级别】

读已提交【在同一个事务中以相同的条件查询得到了不同的值】

【两次查询的结果集不⼀致】


5.3 查看和设置隔离级别
事务的隔离级别分为全局作用域和会话作用域,查看不同作用域事务的隔离级别。

# 查看全局作⽤域
SELECT @@GLOBAL.transaction_isolation;
# 查看会话作⽤域
SELECT @@SESSION.transaction_isolation;
【可以看到默认的事务隔离级别是REPEATABLE-READ--可重复读】
设置事务的隔离级别和访问模式
SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL level|access_mode;

示例




更多推荐




所有评论(0)