一、数据库的并发问题
对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题。
id | username | balance |
25 | 张无忌 | 1000 |
28 | 赵敏 | 1000 |
脏读:对于两个事务T1、T2,T1读取了已经被T2更新但还没有提交的字段,之后,T2回滚,T1读取的就是临时无效的数据。
不可重复度:对于两个事务T1、T2,T1读取了表中的一个字段,然后T2更新了该字段,T1再一次读取同一字段,值就不同了。
幻读:对于两个事务T1、T2,T1读取了表中的一个字段,然后T2在该字段插入了几行数据,T1再一次读取同一字段,就会多出几行数据。
*丢失更新:对于两个事务T1、T2,T2的提交结果影响了T1的提交结果,导致T1的修改丢失。
二、数据库的隔离级别
数据库系统必须具备有隔离并发运行各个事务的能力,使它们不会相互影响,避免各种并发问题。
隔离级别 | 脏读 | 不可重复读 | 幻读 |
read uncommitted (读未提交) |
√ | √ | √ |
read committed (读已提交) |
× | √ | √ |
repeatable read (可重复度) |
× | × | √ |
serializable (可串行化) |
× | × | × |
MySQL默认隔离级别repeatable read.
read committed 演示:
repeatable read 演示:
serializable 演示:
三、常用指令
1.查看当前数据库隔离级别
select @@tx_isolation;
2.设置当前MySQL连接的隔离级别
set transaction isolation level read uncommitted;
3.设置数据库系统的全局隔离级别
set global transaction isolation level read committed;
本文地址:https://blog.csdn.net/qq_43641035/article/details/107161880