MySQL高级——Mysql如何锁定一行数据

目录

    • 一、建表SQL
    • 二、Mysql锁定一行数据语法
    • 三、Mysql锁定一行数据的基本演示

一、建表SQL

1、创建test_innodb_lock表的SQL

CREATE TABLE test_innodb_lock (
a INT(11),
b VARCHAR(16)
)ENGINE=INNODB;INSERT INTO test_innodb_lock VALUES(1,'b2');
INSERT INTO test_innodb_lock VALUES(3,'3');
INSERT INTO test_innodb_lock VALUES(4,'4000');
INSERT INTO test_innodb_lock VALUES(5,'5000');
INSERT INTO test_innodb_lock VALUES(6,'6000');
INSERT INTO test_innodb_lock VALUES(7,'7000');
INSERT INTO test_innodb_lock VALUES(8,'8000');
INSERT INTO test_innodb_lock VALUES(9,'9000');
INSERT INTO test_innodb_lock VALUES(1,'b1');

2、创建test_innodb_lock表a字段索引

CREATE INDEX test_innodb_a_ind ON test_innodb_lock(a);

3、创建test_innodb_lock表b字段索引

CREATE INDEX test_innodb_lock_b_ind ON test_innodb_lock(b);

4、执行查询语句

SELECT * FROM test_innodb_lock;

在这里插入图片描述

二、Mysql锁定一行数据语法

begin;
select xxxx for update;

三、Mysql锁定一行数据的基本演示

1、 在客户端1 和客户端2中都手动关闭自动提交功能

#关闭mysql自动提交
SET autocommit=0;
#开启mysql自动提交
SET autocommit=1;

在这里插入图片描述

2、例如:在客户端1中锁定a=8的数据,先不执行commit操作,然后在客户端2中更新a=8的数据,查看客户端2是否能更新数据。

#在客户端1中执行
begin;
select * from test_innodb_lock where a=8 for update;#在客户端2中执行
update test_innodb_lock set b='80001' where a=8;

在这里插入图片描述

  • 结论: 因为在客户端1中锁定了a=8的数据,因此在客户端2中无法更新a=8的数据,客户端2产生阻塞(上图中阻塞时间约30秒)。需要等待客户端1执行commit操作后客户端2才会更新a=8的数据成。功


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部