《MySQL事务篇》

《MySQL事务篇》

一、ACID特性
  • 原子性(Atomicity):事务中的操作被视为原子操作,要么全部执行成功,要么全部回滚,不会部分执行。
  • 一致性(Consistency):事务在执行前后数据库的状态必须保持一致,满足预定义的约束和规则。
  • 隔离性(Isolation):并发执行的事务之间应该互相隔离,使得每个事务感觉自己在独立地访问数据。
  • 持久性(Durability):一旦事务提交,其对数据库的改变应该是永久性的,即使发生系统故障。
二、事务隔离级别
  1. 读未提交(Read Uncommitted):
    • 事务未提交的数据对其他事务可见,可能出现脏读、不可重复读和幻读的问题。
    • 最低的隔离级别,提供了最高的并发性能,但最低的数据一致性。
  2. 读提交(Read Committed):
    • 只能读取已经提交的数据,解决了脏读问题。
    • 可能出现不可重复读和幻读的问题。
  3. 可重复读(Repeatable Read):
    • 在事务执行期间,同一个查询将返回一致的结果集,不会受到其他事务的修改影响。
    • 解决了脏读和不可重复读问题,但仍可能出现幻读问题。
  4. 串行化(Serializable):
    • 最高的隔离级别,通过对事务进行串行执行,避免了并发问题。
    • 解决了脏读、不可重复读和幻读的问题,但并发性能最低。
三、并发事务影响
  • 脏读(Dirty Read):如果在事务 1 执行取款操作后,但尚未提交事务前,尝试读取账户 1001 的余额,将会读取到未提交的数据。
  • 不可重复读(Non-repeatable Read):如果在事务 1 执行取款操作后,事务 2 执行存款操作并提交后,再次尝试读取账户 1001 的余额,将会发现余额发生了改变,导致多次读取结果不一致。
  • 幻读(Phantom Read):如果在事务 1 执行取款操作后,但尚未提交事务前,事务 2 插入了一条新的账户记录,然后事务 1 再次查询账户数据,将会发现多出了一条新插入的数据,就像出现了幻觉一样。
  • 丢失更新(Lost Update):如果两个事务同时执行存款操作,事务 2 的更新可能会覆盖事务 1 的更新,导致事务 1 的存款操作丢失。
四、什么是事务

事务是一组原子性操作,要么全部成功、要么全部失败。

五、默认隔离级别

可重复度(Repeatable Read)

查询隔离级别,use yourdatabase

SELECT @@global.tx_isolation;

猜你喜欢

转载自blog.csdn.net/weixin_52236586/article/details/131784305
今日推荐