脏读
事务A更新了数据但是并未提交,事务B查询到事务A更新的数据,事务A此时执行回滚操作,事务B读到的数据是脏数据。
不可重复读
事务A多次读取同一数据。事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一样。
幻读
事务A多次读取一组数据。事务B在事务A多次读取的过程中,对数据作了插入或删除,然后提交。导致事务A多次读取的一组数据时,结果并不相同,好像出现了幻觉。
mysql的四种事务隔离:
- 读未提交 (read-uncommitted)
- 读已提交 (read-committed):解决了脏读
- 可重复读 (repeatable-read):解决不可重复读。事务A多次读取同一数据,即使其他事务在此期间对数据更新并提交,事务A依然会读取到相同数据。
- .串行化 (serializable):解决了幻读。事务隔离级别为串行化时,读写数据都会锁住整张表,影响性能。
注意:mysql默认的隔离级别是repeatable-read,可更改为read-committed
在/etc/mysql/mysql.con.d/mysqld.cnf文件中配置
transaction-isolation=READ-COMMITTED
重启mysql服务
sudo service mysql restart
查看mysql事务隔离级别
查看当前会话隔离级别
select @@tx_isolation;
查看当前数据库隔离级别
select @@global.tx_isolation;
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交(Read Uncommitted) | 是 | 是 | 是 |
读已提交(Read Committed) | 否 | 是 | 是 |
可重复读(repeatable-read) | 否 | 否 | 是 |
可串行化(serializable) | 否 | 否 | 否 |
作者:磨镜台
来源:CSDN
原文:https://blog.csdn.net/weixin_42506905/article/details/90372576