1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Merge pull request #2368 from 1125068334/patch-1

Update mysql-questions-01.md
This commit is contained in:
Guide 2024-04-19 14:59:26 +08:00 committed by GitHub
commit db05d2e6b4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -512,7 +512,7 @@ COMMIT;
- 不可重复读的重点是内容修改或者记录减少比如多次读取一条记录发现其中某些记录的值被修改;
- 幻读的重点在于记录新增比如多次执行同一条查询语句DQL发现查到的记录增加了。
幻读其实可以看作是不可重复读的一种特殊情况,单独把区分幻读的原因主要是解决幻读和不可重复读的方案不一样。
幻读其实可以看作是不可重复读的一种特殊情况,单独把幻读区分出来的原因主要是解决幻读和不可重复读的方案不一样。
举个例子:执行 `delete``update` 操作的时候,可以直接对记录加锁,保证事务安全。而执行 `insert` 操作的时候由于记录锁Record Lock只能锁住已经存在的记录为了避免插入新记录需要依赖间隙锁Gap Lock。也就是说执行 `insert` 操作的时候需要依赖 Next-Key LockRecord Lock+Gap Lock 进行加锁来保证不出现幻读。
@ -520,7 +520,7 @@ COMMIT;
MySQL 中并发事务的控制方式无非就两种:**锁** 和 **MVCC**。锁可以看作是悲观控制的模式多版本并发控制MVCCMultiversion concurrency control可以看作是乐观控制的模式。
**锁** 控制方式下会通过锁来显控制共享资源而不是通过调度手段MySQL 中主要是通过 **读写锁** 来实现并发控制。
**锁** 控制方式下会通过锁来显控制共享资源而不是通过调度手段MySQL 中主要是通过 **读写锁** 来实现并发控制。
- **共享锁S 锁)**:又称读锁,事务在读取记录的时候获取共享锁,允许多个事务同时获取(锁兼容)。
- **排他锁X 锁)**:又称写锁/独占锁,事务在修改记录的时候获取排他锁,不允许多个事务同时获取。如果一个记录已经被加了排他锁,那其他事务不能再对这条记录加任何类型的锁(锁不兼容)。