|
|
|
@ -653,6 +653,14 @@ WHERE A.EMP_SUPV_ID = B.EMP_ID;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**数据库中的锁**
|
|
|
|
|
|
|
|
|
|
- **共享锁(Share locks简记为S锁)**:也称**读锁**,事务A对对象T加s锁,其他事务也只能对T加S,多个事务可以同时读,但不能有写操作,直到A释放S锁。
|
|
|
|
|
- **排它锁(Exclusivelocks简记为X锁)**:也称**写锁**,事务A对对象T加X锁以后,其他事务不能对T加任何锁,只有事务A可以读写对象T直到A释放X锁。
|
|
|
|
|
- **更新锁(简记为U锁)**:用来预定要对此对象施加X锁,它允许其他事务读,但不允许再施加U锁或X锁;当被读取的对象将要被更新时,则升级为X锁,主要是用来防止死锁的。因为使用共享锁时,修改数据的操作分为两步,首先获得一个共享锁,读取数据,然后将共享锁升级为排它锁,然后再执行修改操作。这样如果同时有两个或多个事务同时对一个对象申请了共享锁,在修改数据的时候,这些事务都要将共享锁升级为排它锁。这些事务都不会释放共享锁而是一直等待对方释放,这样就造成了死锁。如果一个数据在修改前直接申请更新锁,在数据修改的时候再升级为排它锁,就可以避免死锁。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**InnoDB存储引擎下**的四种隔离级别发生问题的可能性如下:
|
|
|
|
|
|
|
|
|
|
| 隔离级别 | 第一类丢失更新 | 第二类丢失更新 | 脏读 | 不可重复读 | 幻读 |
|
|
|
|
|