当我尝试在特定数据库中重新创建特定表时,MySQL 让我很伤心。我认为问题在于 MySQL 在某个地方有一些表的外键记录,并在我尝试重新创建表时不断尝试检查约束。
有问题的数据库用于测试环境,并通过转储产品数据库、删除测试数据库、再次创建测试数据库然后将产品数据库转储应用到新的测试数据库来定期刷新。
但是昨晚当我去执行这个过程时,我突然遇到了 MySQL 的 errno: 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; 我得到一个错误。我创建了另一个具有不同名称的数据库并遵循相同的步骤;这次没有问题。