恢复转储后,MySQL InnoDB AUTO_INCREMENT失败

时间:2015-03-03 15:32:36

标签: php mysql mysqli innodb

我在生产服务器和开发中拥有InnoDB表的数据库。有几个表有auto_increment列,也包含很少的外键。

问题是在从生产到开发服务器的转储(模式和数据)之后,突然没有来自PHP的新插入增加任何auto_increment键,并且它们导致ai_key 0 在表中。我认为如果不触及服务器上的sql_mode设置,这甚至是不可能的。在这个0键之后,所有程序只更新数据库上的0键行。

插入就像这样(仅举例):

IF vCol = 0 AND (SELECT COUNT(*) FROM aTable WHERE `aId` = vId) = 0     
THEN
    INSERT INTO aTable (
        `aId`,
        `bRandomCol`
    )
    VALUES
    (
        vCol,
        vRandomCol
    )

在PHP中使用mysqli和prepared语句。

在PHP之外调用prosedure也会失败。将包含auto_increment字段的纯insert子句放入其中并为其赋值0,即成功。

使用SHOW TABLE STATUS FROM X LIKE'Y'检查表会按顺序生成正确的键。

我可以使用ALTER TABLE X AUTO_INCREMENT = Z修复问题。

之前有没有人看到这样的问题,或者知道为什么会发生这种情况或者是否有任何解决方法?

0 个答案:

没有答案