Mysql-锁

粒度:

        数据仓库中数据的细化或综合程度的级别

锁的种类(按粒度分):

        全局锁:

                锁定数据库中的所有表。

        表级锁:

                每次操作锁住整张表。

        行级锁:

                每次操作锁住对应的行数据。

全局锁:

        是对整个数据库实例加锁,加锁后只能进行读(DQL)操作,除此之外的语句都会被阻塞。

        使用场景:做全库备份时为了保持数据一致性而加全局锁。

语法:

        加全局锁

flush tables with read lock ;

        数据备份:

        方法一:

mysqldump -uroot –p1234 wecunge > wecunge.sql;

        方法二(推荐): 

mysqldump --single-transaction -uroot –p123456 wecunge > wecunge.sql

         方法一在主库备份时因为全局锁业务无法进行,在从库备份时因无法执行主从同步过来的二进制日志导致主从延迟。

        方法二可以完成不加锁的一致性数据备份。

表级锁:

表锁:

         表共享读锁(read lock):

          加了表共享读锁后,所有客户端只能对表进行读(DQL)操作,会阻塞其他客户端的写操作(DDL/DML)。

         表独占写锁(write lock):

        加了表独占写锁后,当前客户端可以进行读写操作,会阻塞其他客户端的读写操作。

        语法:

         加锁:

lock tables 表名 read/write;

         解锁:

unlock tables;

元数据锁:

        元数据锁在访问表时会自动加上无需显式调用。

        当在表上有活动事务的时候,为了避免DMLDDL冲突,保证读写的正确性,不可以对元数据(表结构)进行写入操作。

意向锁:

        意向锁可以使表锁不用检查每行 数据是否加锁,使用意向锁来减少表锁的检查。

        如果未添加意向锁,为了避免修改操作时行锁与表锁冲突,添加表锁时会检查当前表是否有对应的行锁,如果没有,则添加表锁,此时就会从第一行数据,检查到最后一行数据,效率较低。

不同情况,所添加的锁:


EXCLUSIVE(排他锁X):

一般在执行DDL时会产生该锁。


SHARED_NO_READ_WRITE(排他锁X):

执行lock tables xxx write产生该锁。


SHARED_WRITE(意向排他锁IX):

一般执行DML的更新语句 或 select ... for update产生该锁。


SHARED_READ(意向共享锁IS):

select ... lock in share mode/select...for share产生该锁


SHARED_READ_ONLY(共享锁S):

执行lock tables xxx read产生该锁

查看加锁情况:

        语法:

select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from
performance_schema.data_locks;

行级锁:

        行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在InnoDB存储引擎中。

行锁(Record Lock):

        锁定单个行记录的锁,防止其他事务对此行进行updatedelete。在 RC、RR隔离级别下都支持。

INSERT:

        排他锁,自动加锁

UPDATE:

        排他锁 自动加锁

DELETE:

         排他锁,自动加锁。

SELECT:

        不加任何锁。

SELECT ... LOCK IN SHAREMODE:

        共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排它锁。

SELECT ... FOR UPDATE:

        排他锁(X):允许获取排他锁的事务更新数据,阻止其他事务获得相同数据集的共享锁和排他锁。

注:共享锁和共享锁兼容,和互斥锁互不兼容,互斥锁和互斥锁不兼容。

间隙锁(Gap Lock):

        锁定索引记录间隙(不含该记录),确保索引记录间隙不变,防止其他事 务在这个间隙进行insert,产生幻读。在RR隔离级别下都支持。

临键锁(Next-Key Lock):

        行锁和间隙锁组合,同时锁住数据,并锁住数据前面的间隙Gap。 在RR 隔离级别下支持。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值