MySQL 悲观锁

马谦马谦马谦 MySQL评论595字数 582阅读1分56秒阅读模式

一、什么是悲观锁

前文说明了MySQL事务在并发环境下会导致脏读和不可重复读等等的现象,数据库通过事务隔离级别也就是我们常说的锁来解决这个问题。悲观锁的工作原理是假设每次事务都会被其他事务打断,所以在每次操作数据时,都把数据设置成锁定状态,使得其他事务无法再操作。悲观锁能有效的防止数据并发带来的各种未知情况,但是随之而来的效率的低下。

二、使用

使用select ... for update即开启了悲观锁。

三、案例

创建测试表:

使用悲观锁执行事务:

开启另一个终端查询,查询将被阻塞,直至超时:

四、锁表范围

当查询时明确包含了主键的名字时,锁表范围为查询行,例如上面的例子查询了id=1的记录行,由于id 是主键,此时就会锁住符合条件的行,另外的事务无法再操作这些数据。

但是还能操作其他行:

当查询没有明确指定主键字段值时,锁的范围是整张表。例如我们使用终端一通过name="maqian" 来查询的时候,整个表都会被锁住,其他事务查询任何内容都会失败:

 

 

 

 最后更新:2019-6-19
马谦马谦马谦
  • 本文由 马谦马谦马谦 发表于 2017年11月23日21:16:00
  • 转载请务必保留本文链接:https://www.dyxmq.cn/databases/mysql/mysql-beiguansuo.html
linux环境下安装Mariadb Linux

linux环境下安装Mariadb

一、下载安装 mariadb是属于mysql的一个分支,是其创始人在mysql被卖给oracle之后重新分出来的,maria取自于他女儿的名字。mariadb完全兼容于mysql,在很多新版本的lin...
使用二进制包安装MySQL CentOS

使用二进制包安装MySQL

二进制包安装MySQL的步骤和源码编译安装的步骤差不多,只是少了编译的流程,直接解压就能使用,相对方便很多。 一、安装步骤 创建用户和安装依赖项: # 创建用户 > useradd -s /sb...
MySQL中的unique和primary key MySQL

MySQL中的unique和primary key

primary key用于标识主键,字段被设置为主键后该字段所有值不可重复且不能为null,每个表仅可有一个主键。unique设置字段不可重复,但不包括null值,每张表可以有多个unique字段,n...
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证