MySQL 中的事务隔离级别
最编程
2024-06-21 18:54:54
...
【直播预告】程序员逆袭 CEO 分几步?
概述
在数据库中同一时刻可能有多个事务同事执行,多个事务同时执行时就可能会造成脏读、脏写、不可重复读、幻读等一些问题,为了避免这些问题MySQL提供了事务隔离、锁机制、MVCC多版本控制机制,用一整套机制来解决多事务的并发问题。
事务的基本概念
- 原子性
事务是可以提交和回滚的原子工作单元,要么当前提交的所有改动成功,要么全撤销 - 一致性
数据始终保持一致状态,在提交或回滚之后以及多个表之间更新相关数据,查看到的永远是新值或旧值,不会新旧混合在一起 - 隔离性
数据库提供了一套隔离机制,保证事务执行时不受外部并发操作的影响。 - 持久性
当事务提交后数据将保留在磁盘上,不会因为宕机等原因造成数据丢失
假如没有事务隔离级别并发会造成的一些问题
- 更新数据丢失脏写
A,B两个事物同时查到了某条数据,之后基于这条数据的值进行了修改,此时先提交的记录会被覆盖 - 脏读
事务A读取到了事务B未提交的数据,假如事务A在此基础上做了修改,而事务B又发生了回滚,此时将出现脏读 - 不可重复读
一个事务在未提交前在不同时刻读取到的数据不一致叫做不可重复读, 不符合事务的隔离特性 - 幻读
可重复读下,假如事务A查询到id= 1 2 3 的三条数据,事务B增加了id=4的新数据后提交了事务,事务A更新数据时指定where id > 2; , 这时事务A查询数据会看到4条数据,这个就叫做幻读
不可重复读,则幻读问题更严重
MySQL中提供了四种事务隔离级别
- Read uncommitted
- Read committed
- Repeatable read
- Serializable
自上而下级数据库隔离级别越高,并发的副作用越小,付出的代价越大性能越低,MySQL默认的隔离级别为Repeatable read,根据应用的不同某些应用对可重复读或幻读不敏感也可以使用ReadCommitted来提高运行效率
查看数据库事务隔离级别 mysql5.7 show variables like 'tx_isolation';
mysql8 show variables like 'transaction_isolation';
上一篇: 数据库事务隔离级别
下一篇: 数据库事务隔离级别:控制并发性的重要机制
推荐阅读
-
问删除/var/lib/mysql/中的文件名off.xxx安全吗?EN
-
mysql中QPS、TPS和系统吞吐量的概念和应用
-
MySQL 中的反斜线 \\ 的问题实在令人头疼!!
-
关于设置MySql中varchar长度的问题求助
-
理解MySQL中的ASCII函数:获取字符的ASCII码值
-
在跨越文化的旅程中实现高级别的个人成长
-
理解Oracle的listagg函数与Mysql的group_concat在实际应用中的差异与相似之处
-
深入理解MySQL中的共享锁和排他锁
-
理解MySQL中的各种锁机制和并发问题
-
理解MySQL/InnoDB中的乐观锁、悲观锁、共享锁、排他锁、行锁和表锁的概念,以及死锁的原理