做图书馆网站模板,商业网站建设案例笔记,免费的建站软件有哪些,怎么自己做网页链接共享锁
共享锁指的就是对于多个不同的事务#xff0c;对同一个资源共享同一个锁。相当于对于同一把门#xff0c;它拥有多个钥匙一样。就像这样#xff0c;你家有一个大门#xff0c;大门的钥匙有好几把#xff0c;你有一把#xff0c;你女朋友有一把#xff0c;你们都…共享锁
共享锁指的就是对于多个不同的事务对同一个资源共享同一个锁。相当于对于同一把门它拥有多个钥匙一样。就像这样你家有一个大门大门的钥匙有好几把你有一把你女朋友有一把你们都可能通过这把钥匙进入你们家进去啪啪啪啥的一下理解了哈没错这个就是所谓的共享锁。
刚刚说了对于悲观锁一般数据库已经实现了共享锁也属于悲观锁的一种那么共享锁在mysql中是通过什么命令来调用呢。通过查询资料了解到通过在执行语句后面加上lock in share mode就代表对某些资源加上共享锁了。
比如我这里通过mysql打开两个查询编辑器在其中开启一个事务并不执行commit语句
city表DDL如下
CREATE TABLE city ( id BIGINT ( 20 ) NOT NULL AUTO_INCREMENT, name VARCHAR ( 255 ) DEFAULT NULL, state VARCHAR ( 255 ) DEFAULT NULL, PRIMARY KEY ( id ) ) ENGINE INNODB AUTO_INCREMENT 18 DEFAULT CHARSET utf8;
设置一个id为1的数据
begin; SELECT * from city where id 1 lock in share mode; 然后在另一个查询窗口中对id为1的数据进行更新
update city set name666 where id 1;
此时操作界面进入了卡顿状态过几秒后也提示错误信息
1205 - Lock wait timeout exceeded; try restarting transaction, Time: 51.119000s 那么证明对于id1的记录加锁成功了在上一条记录还没有commit之前这条id1的记录被锁住了只有在上一个事务释放掉锁后才能进行操作或用共享锁才能对此数据进行操作。
再实验一下
加上共享锁后也提示错误信息了通过查询资料才知道对于update,insert,delete语句会自动加排它锁的原因 于是我又试了试SELECT * from city where id 1 lock in share mode;