美文网首页
InnoDB 悲观锁实现

InnoDB 悲观锁实现

作者: 可可西里的星星 | 来源:发表于2019-11-17 12:44 被阅读0次

InnoDB中的select .. for update语句:

1)select .. for update语句仅适用于InnoDB
2)select .. for update语句必须在事务中才能生效。
3)在执行事务中的select .. for update语句时,MySQL会对查询结果集中的每行数据都添加排他锁(行锁、表锁),其它线程对锁定行的 更新、删除、select .. for update查询 这3种操作都会被阻塞,一般的select语句不会被阻塞。
4)查看自动提交是否开启(1表示开启,0表示关闭,默认开启): select @@autocommit
5)InnoDB行级锁的实现:InnoDB的行级锁是通过在索引上加锁来实现的,所以只有通过明确的索引来查找数据时才会使用行级锁。

排它锁的选择:

若where条件中明确指定了主键,且该行数据存在,则只锁定该行,故排它锁为行锁(row lock)。
若where条件中明确指定了主键,但是该行数据不存在,则不会加锁。

若where条件中明确指定了索引,且该行数据存在,则只锁定该行,故排它锁为行锁(row lock)。
若where条件中明确指定了索引,但是该行数据不存在,则不会加锁。

若where条件中未明确指定主键或索引,则会锁定全表,故排它锁为表锁(table lock)。
注:未明确指定 即 未指定(主键/索引) 或 指定的是(主键/索引)的范围

eg:
# 只锁定message_id为1的行
set autocommit=0;
begin;
select * from t_message where message_id=1 for update; # message_id为主键
commit;

# 锁定全表
set autocommit=0;
begin;
select * from t_message where message_id>1 for update; # message_id为主键
commit;

# 锁定全表
set autocommit=0;
begin;
select * from t_message where type='good' for update; # good非索引列
commit;


其它线程因为等待(排它锁)超时而报错:
update t_message set title='asdf' where message_id=1;
[Err] 1205 - Lock wait timeout exceeded; try restarting transaction

相关文章

  • InnoDB 悲观锁实现

    InnoDB中的select .. for update语句: 排它锁的选择: eg:# 只锁定message_i...

  • 分布式锁,数据库锁,进程锁

    1.进程锁 2.分布式锁 3.数据库锁 3.1.悲观锁 (之所以以InnoDB为主介绍锁,是因为InnoDB支持事...

  • Mysql

    MySQL InnoDB中使用悲观锁 要使用悲观锁,我们必须关闭mysql数据库的自动提交属性,因为MySQL默认...

  • InnoDB行锁

    十、 InnoDB行锁0、 查看方式1、 共享锁2、 排他锁3、 意向锁4、行锁案列5、InnoDB锁实现 0、 ...

  • 深入理解InnoDB -- 锁篇

    锁是实现事务隔离性最广泛使用的技术。本文主要分享InnoDB中锁的设计与实现。 锁的定义 下面列举innodb支持...

  • 深入理解InnoDB -- 锁篇

    锁是实现事务隔离性最广泛使用的技术。本文主要分享InnoDB中锁的设计与实现。 锁的定义 下面列举innodb支持...

  • 并发参数

    悲观锁与乐观锁 悲观锁 synchronized和ReentrantLock等独占锁就是悲观锁思想的实现乐观锁一般...

  • 看完你就知道的乐观锁和悲观锁

    看完你就知道的乐观锁和悲观锁 Java 锁之乐观锁和悲观锁 [TOC] Java 按照锁的实现分为乐观锁和悲观锁,...

  • 数据库基础

    1 锁 1.1 InnoDB的锁 行级锁(InnoDB存储引擎实现了两种标准的)共享锁 允许事务读一行数据排他锁 ...

  • 乐观锁和悲观锁

    乐观锁和悲观锁 1、悲观锁的实现 1.1 悲观锁介绍(百科): 悲观锁,正如其名,它指的是对数据被外界(包括本系统...

网友评论

      本文标题:InnoDB 悲观锁实现

      本文链接:https://www.haomeiwen.com/subject/aajpictx.html