SQL Server 数据库事务模拟器
事务隔离级别
读未提交 (Read Uncommitted)
读已提交 (Read Committed)
可重复读 (Repeatable Read)
串行化 (Serializable)
应用隔离级别
隔离级别说明:
读未提交
:最低的隔离级别,允许脏读。一个事务可以读取另一个未提交事务的数据。
读已提交
:防止脏读,但允许不可重复读和幻读。只能读取已经提交的数据。
可重复读
:防止脏读和不可重复读,但允许幻读。确保在事务期间读取的数据不会改变。
串行化
:最高的隔离级别,防止脏读、不可重复读和幻读。事务完全隔离执行。
当前隔离级别下的问题防护:
数据库表
账户表 (Accounts)
账号ID
用户名
余额
交易记录表 (Transactions)
交易ID
账号ID
金额
类型
状态
事务模拟 (事务1和事务2 中的更新账户均为向账户1中存入100元)
事务 1
开始事务
读取账户
更新账户
提交事务
回滚事务
事务 2
开始事务
读取账户
更新账户
提交事务
回滚事务
事务1状态
状态:
未开始
读取数据:
无
修改数据:
无
未开始
事务2状态
状态:
未开始
读取数据:
无
修改数据:
无
未开始
事务1
事务2
数据库
账户1: ¥1000
选择隔离级别,然后点击"开始事务"开始模拟。
并发问题演示
脏读演示
不可重复读演示
幻读演示
丢失更新演示
重置演示
并发问题说明:
脏读
:当一个事务读取了另一个事务未提交的数据,如果该事务回滚,则读取的数据无效。
不可重复读
:当一个事务多次读取同一数据,但在这期间另一个事务修改了数据并提交,导致第一个事务两次读取的结果不一致。
幻读
:当一个事务第一次查询得到一些数据,但第二次同样的查询得到了不同的结果集(有新增或删除的行)。
丢失更新
:当两个事务同时读取然后更新相同的数据,后提交的事务会覆盖先提交事务的更新。
当前演示:
问题描述:
解决方案: