奔腾不止
此后如竟没有炬火,我便是唯一的光......

实际上,为了提高数据库性能,我们尽可能让多个事务同时执行,这就是并发

锁机制:

锁,可以理解为一种‘标注’,表明其数据正在被事务使用......

1,检查数据上有木有锁(其它事务加上去的),确定当前事务的行为;如:等待......;

2,加锁:提示其他事务,该数据正在被事务使用;

3,解锁:操作完成后,删除/消除锁;

锁的类型:

共享锁(Shared,用S表示):用于只读的SELECT语句,又称读锁,共享锁上可以加共享锁,因为它们兼容;

排它锁(Exclusive,用X表示):又称独占锁或写锁,用于INSERT/UPDATE/DELETE语句,X锁不兼容任何锁;

更新锁(Update,用U表示):用在UPDATE/DELETE之前的查找过程,仅在WHERE子句查找过程中使用,一旦找到数据,U锁立刻变为X锁,U锁和U锁不兼容,但和S锁兼容;

四个事务的控制级别是如何使用锁的:

READE UNCOMMITTED(读未提交):读取时,不加共享锁,其它事务也能读(会产生脏读);

READE COMMITTED(读已提交):读取时,加共享锁,其它事务不能读(避免脏读),完成读取就释放;

REPEATABLE READ(可重复读):共享锁一直到事务结束才释放(避免不可重复读),但仅限于查找数据上(可产生幻影读);

SERIALIZABLE(序列化):共享锁的范围扩展到所有可以影响到该事务的对象(避免了幻影读);

以上锁控制,变化的都是共享锁,排它锁始终是在事务结束后释放;

死锁的形成:

 

posted on 2020-09-26 19:09  奔腾不止  阅读(194)  评论(0编辑  收藏  举报