gpt4 book ai didi

MySQL "remembers"删除InnoDB表

转载 作者:行者123 更新时间:2023-11-29 00:59:51 27 4
gpt4 key购买 nike

当我尝试在特定数据库中重新创建特定表时,MySQL 让我很伤心;我认为问题出在 MySQL 的某个地方有一些表的外键记录,并在我尝试重新创建表时不断尝试检查约束。

有问题的数据库用于测试环境,并通过转储生产数据库、删除测试数据库、再次创建测试数据库然后将生产数据库转储应用到新测试数据库来定期刷新。

然而昨晚当我去执行这个程序时,我突然遇到了 MySQL 的错误号:121,这通常与不正确的外键有关......如果我尝试使用不同的表定义,而不指定键,我得到errno: 150 代替。但是,只有当我尝试将转储应用到与旧数据库同名的新数据库时才会发生这种情况。如果我创建一个与旧数据库名称不同的数据库(仍在同一台服务器上)并应用转储,则没有问题。

事实上,即使在一个全新的数据库中,我什至不能创建一个没有任何键的完全相同名称的表。

这个例子说明了问题

mysql> create database test_db;
Query OK, 1 row affected (0.01 sec)

mysql> connect test_db;
Connection id: 1590
Current database: test_db

mysql> create table client_feed_group(id int);
ERROR 1005 (HY000): Can't create table './test_db/client_feed_group.frm' (errno: 150)
mysql> create database new_db_name;
Query OK, 1 row affected (0.00 sec)

mysql> connect new_db_name;
Connection id: 1591
Current database: new_db_name

mysql> create table client_feed_group(id int);
Query OK, 0 rows affected (0.01 sec)

我已经删除了 test_db 数据库;这应该删除所有表和所有记录。然后我创建它,连接到它并尝试创建旧表 client_feed_group;我得到一个错误。我创建了另一个名称不同的数据库并遵循相同的步骤;这次没有问题了。

最佳答案

它似乎与 this MySQL bug 相同.

位于评论最下方的程序对我有用,即

  • 使用与旧表相同的模式再次创建表,但使用 MyISAM 引擎
  • 使用 ALTER TABLE 将引擎更改为 innodb

此后一切正常;我现在可以删除数据库并进行完全恢复,没有任何问题。

关于MySQL "remembers"删除InnoDB表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4057508/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com