码迷,mamicode.com
首页 > 数据库 > 详细

Mysql中的锁

时间:2020-06-19 11:44:43      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:end   focus   手动   log   取消   toc   sql   自动提交   bre   

mysql的锁

问题1 : 如何查看mysql的自动提交的设置?

select @@autocommit; 查看默认提交的状态是否是自动提交 0手动提交 1 自动提交

技术图片

问题2 :怎么设置autocommit;

set @@autocommit=0;

设置的是本次mysql 窗口的自动提交取消,不影响别的连接的自动提交 查看怎么锁定了行锁的例子的演示 1 开启事务 未提交;

技术图片

 

2 重新打开一个连接,更新锁定的行的内容 ,一直等待释放锁

技术图片

 

 

 

3 第一个连接提交完,释放锁

技术图片

 

4 第二次的跟新获得锁得以提交

技术图片

 

5 如果长时间未获得锁,返回的错误超时

技术图片

 

 

 

排它锁:

又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。 排它锁,也称作独占锁,一个锁在某一时刻只能被一个线程占有,其它线程必须等待锁被释放之后才可能获取到锁。又称:x锁, w 锁 例子:

 

共享锁

又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。 共享锁就是允许多个线程同时获取一个锁,一个锁可以同时被多个线程拥有。又称为:s锁, r锁 例子:

 

锁的粒度

表锁: mysql 中最基本的锁策略,并且是开销最小的策略,锁定整张表,阻塞其他用户对该表的读取和写入,只有在没有写锁的时候在能获取读锁,读锁之间不阻塞。 行锁: 最大程度支持了并发 ,但是这个方式也极大增加了锁的开销。

 

死锁

死锁的定义是指两个或者两个以上的事务,再同一资源上的相互占用,并请求对方锁定占用的资源,从而造成的恶性循环。 造成死锁的原因:1 事务的执行顺序,这个很难避免。2 有些是数据引擎的实现方式引起的。

如何解决: 1 数据库检测死锁和死锁超时机制 例如innodb 检测到死锁会返回一个错误。 2 就是事务等待时间设置超时,自动放弃锁的请求,这种不太友好 3 innodb 将死锁中获取锁定最小的事务进行回滚。(锁定回滚法)

Mysql中的锁

标签:end   focus   手动   log   取消   toc   sql   自动提交   bre   

原文地址:https://www.cnblogs.com/liudaya/p/13162074.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!