Mysql X锁,S锁、间隙锁、死锁
凯哥强烈推荐mysql事务相关文章:
1,Mysql X锁和S锁。
1)概念:利用数据库本身提供的锁机制(行级锁)来实现,锁定该行数据。
trx_rows_locked:事务锁住的行数(不是准确数字)。Approximate number or rows locked by this transaction. The value might include delete-marked rows that are physically present but not visible to the transaction.

2)InnoDB的锁trx_tables_locked是行锁。『trx_tables_locked: 1』 are row locks,the tables can usually still be read from and written to by multiple transactions, despite some rows being locked。
InnoDB的行锁是针对索引加的锁。只有在通过where检索条件使用索引时,才使用行级锁,否则使用表锁!
3)for update排他锁没有线程对该结果集中的任何行数据使用排他锁或共享锁,否则申请会阻塞。select * from account where id > 8 and id <> 10 for update;(会对查询结果集中每行数据都添加排他锁)


经测试,id=8的数据在另一事务中可以正常更新,repeatable read模式下由于间隙锁的存在:当插入id = 13的数据时,会block等待锁。lock_data:上界虚记录supremum pseudo-record
4)mysql表锁InnoDB行锁是通过给索引上的索引项加锁来实现的,通过索引条件检索使用行锁,否则使用表锁。
当使用update、insert、delete、select… for update时,如果没有指定索引,则InnoDB使用表锁。


5)select ... lock in share mode。
为查询语句涉及到的数据加上共享锁,阻塞其他事务修改真实数据。
6)共享锁和排他锁。
共享锁(读锁S锁):一
原创不易,完成人机校验,阅读全文