mysql锁总结

mysql锁总结:

文章参考自下面这个博主文章,我这只是一篇总结而已!!!:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.youkuaiyun.com/qq_39736597/article/details/113247788

总结:

MyISAM引擎

读锁

lock table 表名 read;

写锁

lock table 表名 write;

解锁锁

unlock tables;

查看表锁情况

show status like 'Table_locks%';
名称含义
Table_locks_immediate能够立即获得表级锁的次数,每立即获取锁,值加1
Table_locks_waited不能立即获取表级锁而需要等待的次数,每等待一次,该值加1,此值高说明存在着较为严重的表级锁争用

1)对MyISAM 表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;
2)对MyISAM 表的写操作,则会阻塞其他用户对同一表的读和写操作;
3)对MyISAM的表进行加锁的当前账号,必须处理当前表,不能处理别的表,相当于买了火车票必须得支付这种

InnoDB 引擎

1)对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁(X);
对于普通SELECT语句,InnoDB不会加任何锁;
可以通过以下语句显示给记录集加共享锁或排他锁 。

共享锁(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE

排他锁(X) :SELECT * FROM table_name WHERE ... FOR UPDATE

2)无索引行锁升级为表锁

3)间隙锁
当我们用范围条件,而不是使用相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据进行加锁;
说明:比如我们要查找id<10的记录,此时数据库中,id的值分别为1,2,3,4,6,9,此时的5,7,8就都是间隙,innoDB会对1-10的行都会加锁。
3)查看行锁状态

show  status like 'innodb_row_lock%';
名称含义
Innodb_row_lock_current_waits当前正在等待锁定的数量
Innodb_row_lock_time从系统启动到现在锁定总时间长度
Innodb_row_lock_time_avg每次等待所花平均时长
Innodb_row_lock_time_max从系统启动到现在等待最长的一次所花的时间
Innodb_row_lock_waits系统启动后到现在总共等待的次数
Innodb_row_lock_current_waits当前正在等待锁定的数量

意向锁

意向锁就是其中的一种表锁。
意向锁是一种不与行级锁冲突表级锁
意向锁是有数据引擎自己维护的,用户无法手动操作意向锁,在为数据行加共享 / 排他锁之前,InooDB 会先获取该数据行所在在数据表的对应意向锁。
具体参考链接:
意向锁参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值