互联网服务MySQL

rr下的行锁问题?

会话1中执行如下:

mysql> select * from ttt;
idnamescore
1aa60
2bb70
3cc80

3 rows in set (0.00 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> update ttt set name='aaa' where score=60;
Query OK, 1 row affected (0.07 sec)
Rows matched: 1 Changed: 1 Warnings: 0

会话2中执行:

mysql> select * from ttt;
idnamescore
1aa60
2bb70
3cc80

3 rows in set (0.00 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> update ttt set name='a' where score=70;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

会话3中执行:

mysql> select * from information_schema.innodb_locks;
lock_idlock_trx_idlock_modelock_typelock_tablelock_indexlock_spacelock_pagelock_reclock_data
20759:177:3:520759XRECORDtest.tttPRIMARY177351
20757:177:3:520757XRECORDtest.tttPRIMARY177351

其中表ttt的结构如下:

mysql> show create table ttt;
TableCreate Table
tttCREATE TABLE ttt (

id int(11) NOT NULL AUTO_INCREMENT,
name varchar(20) DEFAULT NULL,
score int(11) DEFAULT NULL,
PRIMARY KEY (id)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

问题1;
请问ttt上没有普通索引,在会话1中更新score=60的记录时候,应该是把所有的记录都加上行锁
但是通过information_schema.innodb_locks没有看到
问题2;
请问会话1,会话2更新的不同行,一个是60,一个是70,
为什么information_schema.innodb_locks中 的lock_data都是1 呢???

参与4

1同行回答

zhang2005zhang2005软件开发工程师中国太平洋保险
估计是间隙锁造成的显示全部

估计是间隙锁造成的

收起
软件开发 · 2019-01-09
浏览1350

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2019-01-06
  • 关注会员:3 人
  • 问题浏览:1604
  • 最近回答:2019-01-09
  • X社区推广