mysql innodb引擎 关于分区表的bug

本文探讨了MySQL InnoDB引擎在处理分区表时出现的一个bug,详细解析了问题产生的原因和影响,并提供了可能的解决方案。通过案例分析,帮助读者理解并避免在实际操作中遇到类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql bug:
version :windows下的5.7.17-log和linux下的5.7.17-0ubuntu0.16.04.2
步骤如下:

1.使用如下语句创建表:

create table t(
id int)engine=innodb
partition by range(id)(
partition p0 values less than (10),
partition p1 values less than (20));
2.然后使用如下语句插入数据:
insert into t select 9;
insert into t select 10;
insert into t select 15;
3.执行如下的查询语句:
select *from information_schema.partitions where table_schema=database() and table_name='t'\G
显示的结果是:
    1:row
    .
    .
    .
    table_rows:1
    .
    .
    .
    2:row
    .
    .
    .
    table_rows:2
    .
    .
    .
4.执行如下修改表语句来添加分区:
alter table t add partition(
partition p2 values less than maxvalue);
5.执行3中的select语句:
显示结果:
    1:row
    .
    .
    .
    table_rows:0
    .
    .
    .
    2:row
    .
    .
    .table_rows:2
    .
    .
    .
    3:row
    .
    .
    .
    table_rows:0
    .
    .
    .
推断:
1:row变成了0,然而select*form t;表数据在表alter前后并没有变化
尝试在建表的时候指定表类型为:MyISAM,执行上述过程,发现这个由alter table只存在于innodb存储引擎
那么一定时bug,不可能是语法
然后又尝试了将4中的步骤改成执行alter table t modify id int(4);然后执行3步骤的查询也出现了1:row中的table_rows为0的情况。
总结:
在我所尝试的两个版本(windows下的5.7.17-log和linux下的5.7.17-0ubuntu0.16.04.2)中存在alter table 语句修改innodb存储引擎的分区表时,影响information_schema.partition下此innodb表的第一个分区的table_rows,使其被置为0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值