加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

怎么理解mysql innodb的行锁办法

发布时间:2023-07-22 13:37:31 所属栏目:MySql教程 来源:
导读:本篇内容主要讲解“怎么理解mysql innodb的行锁方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解mysql innodb的行锁方式”吧!真正的

本篇内容主要讲解“怎么理解mysql innodb的行锁方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解mysql innodb的行锁方式”吧!

真正的方式是: 基于索引找到对应的行(不是使用所有的where条件找到对应的行), 然后基于行数据加锁。

root@sakila 10:27:15>show indexes from tab_no_index \G;

*************************** 1. row ***************************

    Table: tab_no_index

  Non_unique: 1

   Key_name: id

 Seq_in_index: 1

 Column_name: id

  Collation: A

 Cardinality: 6

   Sub_part: NULL

    Packed: NULL

     Null: YES

  Index_type: BTREE

   Comment:

Index_comment:

*************************** 2. row ***************************

    Table: tab_no_index

  Non_unique: 1

   Key_name: name

 Seq_in_index: 1

 Column_name: name

  Collation: A

 Cardinality: 6

   Sub_part: NULL

    Packed: NULL

     Null: YES

  Index_type: BTREE

   Comment:

Index_comment:

2 rows in set (0.00 sec)

会话1:

root@sakila 10:26:17>select * from tab_no_index where id=1 for update;

+------+------+

| id | name |

+------+------+

|  1 | 1  |

|  1 | 4  |

+------+------+

2 rows in set (0.00 sec)

会话2:通过 name index 找到 id=1 and name=4 的这条记录,想加锁,但是不成功,因为该条记录已经被会话1加锁了。 

root@sakila 10:27:04>select * from tab_no_index where name='4' for update;

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

到此,相信大家对“怎么理解mysql innodb的行锁方式”有了更深的了解,不妨来实际操作一番吧!

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章