mysql事务、锁

事务: 

目的:

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

例如: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事务、锁

 mysql事务、锁

死锁例子:

mysql事务、锁