更新锁
    U锁,在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象。

    因为当使用共享锁时,修改数据的操作分为两步:
    1. 首先获得一个共享锁,读取数据,
    2. 然后将共享锁升级为排他锁,再执行修改操作。

    这样如果有两个或多个事务同时对一个事务申请了共享锁,在修改数据时,这些事务都要将共享锁升级为排他锁。这时,这些事务都不会释放共享锁,而是一直等待对方释放,这样就造成了死锁。 如果一个数据在修改前直接申请更新锁,在数据修改时再升级为排他锁,就可以避免死锁。

    性质
    1. 用来预定要对此页施加X锁,它允许其他事务读,但不允许再施加U锁或X锁;
    2. 当被读取的页要被更新时,则升级为X锁;
    3. U锁一直到事务结束时才能被释放。