Rumah  >  Artikel  >  pangkalan data  >  MySQL 幻读怎么解决?

MySQL 幻读怎么解决?

Guanhui
Guanhuiasal
2020-06-18 15:39:153535semak imbas

MySQL 幻读怎么解决?

MySQL 幻读怎么解决?

1、MVCC快照,将历史数据存一份快照,在其事务增加与删除数据时,保证当前事务来说是不可见的;

多数数据库都实现了多版本并发控制,并且都是靠保存数据快照来实现的。

以 InnoDB 为例,每一行中都冗余了两个字断。一个是行的创建版本,一个是行的删除(过期)版本。版本号随着每次事务的开启自增。事务每次取数据的时候都会取创建版本小于当前事务版本的数据,以及过期版本大于当前版本的数据。

普通的 select 就是快照读。

select * from T where number = 1;

2、“next-key”锁,将当前数据行与上一条数据和下一条数据之间的间隙锁定,保证此范围内读取的数据是一致的。

next-key 锁包含两部分

  • 记录锁(行锁)

  • 间隙锁

记录锁是加在索引上的锁,间隙锁是加在索引之间的。(思考:如果列上没有索引会发生什么?)

select * from T where number = 1 for update;
select * from T where number = 1 lock in share mode;
insert
update
delete

推荐教程:《MySQL教程

Atas ialah kandungan terperinci MySQL 幻读怎么解决?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn