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

mysql事务、锁

时间:2020-05-04 17:10:39      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:update   行数据   其他   出错   语句   安全   src   中间   span   

 

事务: 

目的:

把所有小环节当成一个环节, 小环节一个出错 就整体失败,要么都成功,要么都不成功。

例如:A给B转钱,是两个小环节,A减钱、B加钱,中间任意环节出错,都表示不成功。

 

排他锁:

介绍:

行级锁,锁住之后,其他人就操作不了该行信息,会陷入阻塞状态直到前面的用户commit或rollback之后才可操作。

 

使用场景:

例如转钱,一个客户给另一个客户转钱,然后需要两行内容都先上锁保证数据安全,再修改内容,修改完提交,另一个人再操作改行内容。

 

使用方式:

select 字段 from 表名  where 索引字段=值 for update;   // 行级上锁写法,必须是建立了索引字段 

 

需要注意的问题:

1. 有可能造成死锁,例如A给B转钱,B也再给A转钱,A、B同时锁了自己的行数据,之后A等B的锁释放,B等A的锁释放,就成了死锁状态,最后一个会自动报错,第一个人直接锁住他的行数据。

2. for update是加上锁了,只是同for update语句会陷入阻塞,不影响查询语句不加for update的。 

 

排他锁例子:

技术图片

 

 技术图片

死锁例子:

技术图片

 

mysql事务、锁

标签:update   行数据   其他   出错   语句   安全   src   中间   span   

原文地址:https://www.cnblogs.com/zezhou/p/12827109.html

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