Mysql——加读锁、加写锁

阅读: 评论:0

Mysql——加读锁、加写锁

Mysql——加读锁、加写锁

  • 加读锁:

会话0:
lock table tablelock read;
select * from tablelock; —读(查),可以(自己加了锁,自己可以读)
delete from tablelock where id=1; —写(增删改),不可以

在当前会话中访问其他表(emp表,未加锁):
select * from emp; —读,不可以
delete from emp where eid = 1; —写,不可以

结论1:
—如果某一个会话,对A表加了锁,则该会话可以对A表进行读操作,不能进行写操作;且该会话不能对其他表进行读、写操作。
—即如果给A表加了读锁,则当前会话只能对A表进行读操作。

会话1(其他会话):
select * from tablelock; --读(查),可以
delete from tablelock where id=1; —写,会“等待”会话0将锁释放

select * from emp; --读(查),可以
delete from emp where eid=1; —写,可以

结论2:
会话0给A表加了锁:

  • 其他会话的操作:
    a.可以对其他表(A表以外的表)进行读、写操作
    b.对A表:读–可以;写–需要等待释放锁

  • 加写锁:

会话0:
lock table tablelock write;
结论:当前会话(会话0)可以对加了写锁的表进行任何操作(增删改查);但是不能操作(增删改查)其他表

其他会话:
对会话0中加写锁的表可以进行增删改查的前提是:等待会话0释放写锁

MySQL表级锁的锁模式:
MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,
在执行更新操作(增删改(DML))前,会自动给涉及的表加写锁。

所以对MyISAM表进行操作,会有以下情况:
a.对MyISAM表的读操作(如读锁),不会阻塞其他进程(会话)对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,才会执行其它进程的写操作。
b.对MyISAM表的写操作(加写锁),会阻塞其他进程(会话)对同一表的读和写操作,只有当写锁释放后,才会执行其他进程的读写操作。

本文发布于:2024-02-05 00:44:59,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170720195161440.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:Mysql   加读锁   加写锁
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23