我按照这些 说明使用 phpMyAdmin 将 auto_increment 的值重置为最后一个最大值。
例子:
如果我有这个表和数据:
DROP TABLE IF EXISTS `Tbl_Lis_Agencias`;
CREATE TABLE IF NOT EXISTS `Tbl_Lis_Agencias` (
`IdAgency` int(3) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
`AgencyCodU` int(3) UNSIGNED ZEROFILL NOT NULL DEFAULT '000',
`AgencyName` varchar(40) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`Agency_Order` int UNSIGNED DEFAULT NULL,
`AgencyStatus` int UNSIGNED NOT NULL DEFAULT '1',
PRIMARY KEY (`IdAgency`),
UNIQUE KEY `IdAgency` (`IdAgency`),
UNIQUE KEY `Agency_Order` (`Agency_Order`),
UNIQUE KEY `AgencyName` (`AgencyName`),
KEY `xAgencyStatus` (`AgencyStatus`)
) ENGINE=InnoDB AUTO_INCREMENT=12345 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `Tbl_Lis_Agencias` VALUES
(001, 001, 'Panama', 1, 1),
(002, 020, 'Aguadulce', 2, 1),
(003, 080, 'David', 3, 1),
(004, 010, 'Vacamonte', 4, 1),
(005, 060, 'Prueba', 5, 1);
如果我运行这个:
phpMyAdmin 说这是一个成功的更新:
但是当我切换到操作选项卡时,我又看到了:
我不想做的,我被迫去终端运行这个:
ALTER TABLE Tbl_Lis_Agencias AUTO_INCREMENT = 5
然后我再次查看操作选项卡
为什么第一个示例中的操作选项卡没有更新?
这篇文章中的解决方案没有用,我必须通过 phpMyAdmin 完成所有操作,而不是通过终端。
更新
我检查了 phpmyadmin 是否显示幽灵值;与这篇文章相关:https ://github.com/phpmyadmin/phpmyadmin/issues/16378
https://stackoverflow.com/questions/64214549/mysql-information-schema-bugged/64214609#64214609
MySQL 8.0 尝试缓存有关表的统计信息,但在实现中似乎存在一些错误。有时它将表统计信息显示为 NULL,有时它显示值,但在您修改表数据时无法更新它们。
例如,请参阅https://bugs.mysql.com/bug.php?id=83957,这是一个讨论此缓存行为问题的错误。
您可以禁用缓存。它可能会导致对 INFORMATION_SCHEMA 或 SHOW TABLE STATUS 的查询稍微慢一些,但我想这并不比 MySQL 8.0 之前的版本差。
整数值是 MySQL 保持统计信息缓存的秒数。如果您查询表统计信息,您可能会看到缓存中的旧值,直到它们过期并且 MySQL 通过从存储引擎中读取来刷新它们。
缓存到期的默认值为 86400 或 24 小时。这似乎太过分了。
见https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_information_schema_stats_expiry