Mysql无法创建外键错误121但不存在

时间:2015-10-10 04:38:52

标签: php mysql linux

我有一个奇怪的问题,我正在尝试创建一个具有特定名称的外键,但mysql说:“Can't create table #sql-85f_169' (errno: 121)”所以我理解这个名字必须是唯一的,因为没有人用那个名字。

完整的故事:我们在一个服务器(ubuntu server14)中有16个数据库,用于多个网页,具有相同的结构,相同的表,相同的所有内容,但数据库名称不同。 最近我们为新客户端添加了一个新的数据库,所以我们复制了另一个16,我们通常下载一个并替换数据库的名称并保持相同的结构。 我需要在表“orders”中添加一个新的外键,所以我删除了以前的2个外键,名称为“order_ibfk_1”和“order_ibfk_2”,并增加了3个:

ALTER TABLE `orders`
  ADD CONSTRAINT `order_ibfk_1` FOREIGN KEY (`id_reception`) REFERENCES `recepction` (`id_recepction`),
  ADD CONSTRAINT `order_ibfk_2` FOREIGN KEY (`id_type_order`) REFERENCES `type_order` (`id_type_order`),
  ADD CONSTRAINT `order_ibfk_3` FOREIGN KEY (`id_company`) REFERENCES `company` (`id_company`);

我在16个数据库中的每个数据库上都做到了这一点并且工作正常,但是在新的数据库中没有,新数据库17显示(errno: 121)但是我已经删除了所有foreigns键,表是空的,我甚至删除了整个表并制作一个新表并继续说同样的错误。我检查了information_schema.TABLE_CONSTRAINTSKEY_COLUMN_USAGE在此数据库中不存在名称“order_ibfk_1”。在SHOW ENGINE INNODB STATUS\G部分LATEST FOREIGN KEY ERROR表示重复的名称。

¿也许是在缓存或什么?,我们已经重新启动了服务和服务器,这只发生在生产服务器上,在本地工作正常。这个数据库和其他16个数据库正在运行并且24小时工作,所以我们不能每次都打断他们的工作。

我正在考虑在第一次机会中删除数据库17,以便稍后恢复它。当我尝试运行外键查询时,有时我会收到此错误#2013 - Lost connection to MySQL server during query,但只说当在该数据库17上使用phpmyadmin或ssh时,其他16上的相同查询不会产生任何错误,我使用SET @@global.max_allowed_packet = 1048576*10;执行查询但错误121。 任何的想法? ¿mysql闹鬼?

1 个答案:

答案 0 :(得分:0)

这是我做的:

我下载了数据库以在本地使用它,我尝试运行sql,一切顺利。

所以我刚刚下载了数据库,在服务器上将其删除,重新上传并在服务器中运行sql,并且完美无缺。我猜是缓存或内存中的东西。