MYSQL 的行锁是如何工作的
上文是针对于 MySQL 的锁分类
其实主要的是针对于单条数据的记录的行锁 或者表锁;
表级锁模式:
表共享锁
独占写锁
线程获取表的读锁之后,其他线程仍然对表可以读操作,但是不能对表进行操作,
MySQL 命令添加表锁
添加表级锁,读锁或者写锁
复制代码
MySQL 的行锁
行锁是针对于特点的数据记录,
对于当前 MySQL 的主流存储引擎,innoDB 中,有两种类型的行锁,
共享锁
排他锁
其中 共享锁--->一个事务只能读取一行数据, 并且添加了共享锁之后的数据,就不能给增加排他锁;
排他锁--->对于当前事务,中的数据进行数据的 CRUD 的操作,并且当前的数据行,不能增加排他锁和共享锁
其中比较重要的是,对于主要的数据表中的索引字段,如果对非索引字段进行设置行锁,可能会将行锁编成表锁。
可以使用
lock in share mode 命令
--->共享锁
select * from data where id =1 for update
区分行锁和表锁的关键,是看当前的锁,是针对对全部的数据表的,还是只是当前更新数据的记录的,
比如 当前我要下单一个商品,只是在当前记录表的数据增加或者修改,
这个就是行级数据,进行操作
如果是我对这个表操作, 比如高并发的环境下,对其当前表增加一个数据,但是 支持的并发比较低,相应的数据安全的性能也比较低,
牺牲性能来保证数据安全
版权声明: 本文为 InfoQ 作者【卢卡多多】的原创文章。
原文链接:【http://xie.infoq.cn/article/0743a452e80f2d5914c04fac5】。文章转载请联系作者。
评论