MYSQL中事务特性以及隔离机制

今天来讲一讲MYSQL中的事务特性以及隔离机制和一些可能出现的问题

事务特性(ACID):

ACID 是数据库事务的四个关键特性的首字母缩写:

1、原子性(Atomicity):

事务中的所有操作要么全部执行成功,要么全部失败回滚,没有中间状态。这确保了事务的完整性。

2、一致性(Consistency):

事务在开始和结束时数据库的状态必须保持一致。这意味着在事务内部的操作不会破坏数据库的完整性。

3、隔离性(Isolation):

并发执行的事务之间应该互不干扰。一个事务在提交前,其所做的变更对其他事务是不可见的。

4、持久性(Durability):

一旦事务提交,其变更将被永久保存在数据库中,即使系统崩溃也不会丢失。

隔离机制和问题:

数据库隔离级别决定了多个事务之间的可见性

1、读未提交(Read Uncommitted):

最低级别的隔离,允许一个事务读取另一个事务未提交的数据。可能出现脏读、不可重复读和幻读问题。

2、读已提交(Read Committed):

允许一个事务只能读取另一个已提交事务的数据。可以防止脏读问题,但不可避免不可重复读和幻读问题。

3、可重复读(Repeatable Read):

保证在同一个事务中的查询返回一致的结果。防止脏读和不可重复读问题,但幻读问题仍可能出现。

4、串行化(Serializable):

最高级别的隔离,确保所有事务按顺序执行,避免了脏读不可重复读幻读问题。但会降低并发性能。

*脏读,不可重复读,幻读:

1、脏读(Dirty Read):

一个事务读取了另一个事务尚未提交的数据,如果另一个事务回滚,读取的数据就是无效的。

2、不可重复读(Non-repeatable Read):

在一个事务内,同一个查询在不同时间段内返回了不同的结果,通常是因为另一个事务修改了数据。

3、幻读(Phantom Read):

在一个事务内,同一个查询在不同时间段内返回了不同数量的行,通常是因为另一个事务插入、更新或删除了数据。

不同隔离级别的解决问题:

1、读未提交(Read Uncommitted):

不提供任何隔离,可能导致脏读、不可重复读和幻读问题。

2、读已提交(Read Committed):

解决了脏读问题,但仍可能出现不可重复读和幻读问题。

3、可重复读(Repeatable Read):

解决了脏读和不可重复读问题,但仍可能出现幻读问题。

4、可重复读(Repeatable Read):

解决了脏读和不可重复读问题,但仍可能出现幻读问题。

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;  #设置隔离级别为读未提交

---执行查询操作,观察可能的问题

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;  #恢复默认隔离级别

如果想要测试不同隔离级别的影响,可以使用MYSQL中的 'SET TRANSACTION ISOLATION LEVEL' 命令来设置隔离级别,并进行一系列的操作来观察问题的发生情况,可参照以上操作进行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值