暂无图片
mysql 8.0,下 rr下的锁问题?
我来答
分享
暂无图片 匿名用户
mysql 8.0,下 rr下的锁问题?

mysql> create table tt(
-> id int primary key,
-> age int,
-> key idx_age(age)
-> );


mysql> select * from tt;
+----+------+
| id | age |
+----+------+
| 1 | 1 |
| 2 | 3 |
| 3 | 4 |
| 4 | 4 |
| 5 | 7 |
| 6 | 7 |
| 7 | 10 |
| 8 | 11 |
+----+------+


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

mysql> delete from tt where age=7;
Query OK, 2 rows affected (0.00 sec)

为什么加锁的范围是【4,10) 呢?


mysql> select * from performance_schema.data_locks;
+--------+-----------------------------------------+-----------------------+-----------+----------+---------------+-------------+----------------+-------------------+------------+-----------------------+-----------+---------------+-------------+-----------+
| ENGINE | ENGINE_LOCK_ID | ENGINE_TRANSACTION_ID | THREAD_ID | EVENT_ID | OBJECT_SCHEMA | OBJECT_NAME | PARTITION_NAME | SUBPARTITION_NAME | INDEX_NAME | OBJECT_INSTANCE_BEGIN | LOCK_TYPE | LOCK_MODE | LOCK_STATUS | LOCK_DATA |
+--------+-----------------------------------------+-----------------------+-----------+----------+---------------+-------------+----------------+-------------------+------------+-----------------------+-----------+---------------+-------------+-----------+
| INNODB | 140270552234600:1162:140270477832904 | 15589 | 51 | 643 | dba | tt | NULL | NULL | NULL | 140270477832904 | TABLE | IX | GRANTED | NULL |
| INNODB | 140270552234600:105:5:6:140270477829864 | 15589 | 51 | 643 | dba | tt | NULL | NULL | idx_age | 140270477829864 | RECORD | X | GRANTED | 7, 5 |
| INNODB | 140270552234600:105:5:7:140270477829864 | 15589 | 51 | 643 | dba | tt | NULL | NULL | idx_age | 140270477829864 | RECORD | X | GRANTED | 7, 6 |
| INNODB | 140270552234600:105:4:6:140270477830208 | 15589 | 51 | 643 | dba | tt | NULL | NULL | PRIMARY | 140270477830208 | RECORD | X,REC_NOT_GAP | GRANTED | 5 |
| INNODB | 140270552234600:105:4:7:140270477830208 | 15589 | 51 | 643 | dba | tt | NULL | NULL | PRIMARY | 140270477830208 | RECORD | X,REC_NOT_GAP | GRANTED | 6 |
| INNODB | 140270552234600:105:5:8:140270477830552 | 15589 | 51 | 643 | dba | tt | NULL | NULL | idx_age | 140270477830552 | RECORD | X,GAP | GRANTED | 10, 7 |
+--------+-----------------------------------------+-----------------------+-----------+----------+---------------+-------------+----------------+-------------------+------------+-----------------------+-----------+---------------+-------------+-----------+

这里没有4的锁,但是我插入4却插入不了,

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
everything

因为idx_age 上next-key lock锁定的范围是((4,4),(10,7)],不是【4,10)。
验证很简单,你把age为1的id改为100,可以插入(1,4)。

暂无图片 评论
暂无图片 有用 1
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
怎么计算表在heatwave里面占用的空间?
回答 1
HeatWave是MySQL实时分析计算架构,做OLAP的用的。市面上很少使用。按照个人经验,这个可以通过字段的长度byte计算就可以算出空间。最好可以在官方咨询下。
MySQL 5.7 升级mysql8 需要注意什么?
回答 1
密码插件onlyfullgroupby改变
mysql中,一个普通表可以最多建立多少个分区呢?
回答 1
一个表最多1024个分区,5.7支持8196个分区
如果mysql某张表数据量相当大 删掉大部分数据后,可用空间会不会增大?
回答 3
这种大表,若删除大部分数据,一般采取:1)建新表,2)将要的数据插入进去3)验证数据没问题后,做新表换旧表4)新表正常使用后,旧表保留段时间,就清空,然后在删除这样既保证数据处理过程有备份,又能实现清
mysql分区表好用吗?大家有使用不?解决表数据量大问题
回答 1
已采纳
主要取决你的数据量和历史数据;如果历史数据多就用分区表,如果数据量大就用分表方式;sql和索引设置合理那种都行;
mysql cpu使用率超过100%, 这是为什么?
回答 3
已采纳
查看当前sql正在跑什么?查看慢sql日志,看是否有异常sql?
MySQL 8默认TCP端口都有哪些? A3306、B33060、C33063、D33062
回答 4
已采纳
ABDMySQL默认TCP端口号: 1、3306用于MySQLClassic协议(服务器端口选项) 2、33060用于MySQLX协议(服务器mysqlxport选项) 
MySQL update主键检索行数
回答 1
对于主键的修改是先删除行值,再插入行值,所以一般不建议修改主键,或者将主键设置为与业务无关的id序列
mysql中本地和远程连接通过哪个字段区分?
回答 1
本地连接:本地连接主机地址通常是localhost、127.0.0.1。例如:‘root’@‘localhost’;‘root’@‘127.0.0.1’;远程连接:远程连接主机地址是远程客户端机器的I
我定义了一个名为IP的变量,要在红框处引用它,应该怎么写?
回答 2
“string”类型就可以了,执行的时候要直接暴露出来不要有’‘之类的