概述:锁是在并发访问时,解决数据的有效性、一致性问题,有全局锁、表级锁、行级锁,锁粒度越小越好。
全局锁:是对整个数据库实例加锁,一旦对整个数据库实例加了锁,那么就意味着这个数据库的实例处于只读状态,是不能够进行写入操作的,其他所有的写入操作都会处于阻塞状态,
性能比较差,主要是用着数据的逻辑备份。如果觉得数据备份加全局锁的成功比较高,那也可以通过一个参数,single transaction,通过这个参数解决数据备份时的一致性问题。
表级锁:锁住整张表,锁的粒度大,发生锁冲突的概率也比较高。分为:表锁、元数据锁、意向锁。
表锁时,我们可以对整张表加读锁和写锁,把整张表锁住。而元数据锁它主要的目的是为了避免我们执行DML语句和DDL语句时候冲突的情况。意向锁的目的是规避行锁和表锁在加锁时的冲突问题,表锁在加锁的时候会逐行的查这张表的行锁情况,而
对于意向锁我们不用手动去加锁,它会自动加上对应的意向锁。
行级锁:锁住的是对应的行数据。锁的粒度是最小的,发生锁冲突的概率也是最低的,分为:行锁、间隙锁、临建锁。
行锁顾名思义锁的就是具体的行,而在行锁当中,共享锁和共享锁之间可以兼容,共享锁与排他锁是互斥的,排他锁与排他锁都是互斥的,间隙锁,锁住的是两条记录之间的间隙,临键锁它锁的是记录和间隙,简单理解为,临键锁就是行锁和间隙锁的组合。
那么间隙锁的出现主要是为了避免,我们多个事务并发操作时出现幻读现象。
标签:总结,加锁,行锁,间隙,锁住,意向锁,mysql,表锁 From: https://www.cnblogs.com/wekenyblog/p/17204552.html