Bootstrap

MYSQL的行锁是如何工作的

上文是针对于MySQL的锁分类

其实主要的是针对于单条数据的记录的行锁 或者表锁;

表级锁模式:

  • 表共享锁

  • 独占写锁

线程获取表的读锁之后,其他线程仍然对表可以读操作,但是不能对表进行操作,

MySQL命令添加表锁

 lock table  表名称  read(write);


  lock table  data read ;添加读锁表级别的
  
  
  lock table  data write ;添加写锁表级别的
  
  
  删除 表锁命令
  
  unlock  tables;

MySQL的行锁

行锁是针对于特点的数据记录,

对于当前MySQL的主流存储引擎,innoDB中,有两种类型的行锁,

  • 共享锁

  • 排他锁

其中 共享锁--->一个事务只能读取一行数据, 并且添加了共享锁之后的数据,就不能给增加排他锁;

排他锁--->对于当前事务,中的数据进行数据的CRUD的操作,并且当前的数据行,不能增加排他锁和共享锁

其中比较重要的是,对于主要的数据表中的索引字段,如果对非索引字段进行设置行锁,可能会将行锁编成表锁。

可以使用

--->共享锁

区分行锁和表锁的关键,是看当前的锁,是针对对全部的数据表的,还是只是当前更新数据的记录的,

比如 当前我要下单一个商品,只是在当前记录表的数据增加或者修改,

这个就是行级数据,进行操作

如果是我对这个表操作, 比如高并发的环境下,对其当前表增加一个数据,但是 支持的并发比较低,相应的数据安全的性能也比较低,

牺牲性能来保证数据安全