好的,这真令人困惑。
我在Mac OS X(Lion)上使用MySQL 5.5.20。有人给了我一个.MDB数据库,所以我把它带到MySQL。最初没问题。
然后我正在清理数据库/表格/字段。我希望所有表都有一个ID字段。在某些情况下,它们存在,但我希望它们被称为ID。在其他情况下,没有这样的领域,所以我创建了一个。
有一个名为CityList的表。我把它改名为城市。我将CityList中的主键字段重命名为ID。
另一张名为Venues的桌子。它有三个字段VenuesID,VenueName和CityList。我将CityList字段重命名为CityID。
然后,我尝试将VenuesID重命名为ID。它失败了errorno:150。我尝试使用Sequel Pro,我尝试使用命令行。什么都没有。
我尝试将Venues表重命名为其他内容。相同的结果:150。
我尝试删除它后重新创建数据库。相同的结果:150。
我可以通过调用Venues表“Boxes”来导入完全结构和数据。不是那个问题的耳语。
所以,我以为我会很聪明。我将完整的结构和数据导出到SQL语句中,包括CREATEd Boxes表和INSERTed INTO Boxes的最后一个表。我编辑了文件,将所有“Boxes”更改为“Venues”并重新创建数据库。
它奏效了,但是......我把“场地”错误地称为“Venes”。所以完整的数据库结构就在那里和所有数据。只是桌子的名字是错的。
我无法将其重命名为Venues。
我现在已经摧毁并重试了大约一个小时。这没有道理。感觉就像某个地方在MySQL中仍有一些记录,场地表1)仍然存在,2)不能改变。
任何建议?
P上。 S.我要创建的代码是:
CREATE TABLE `Locations` (
`VenuesID` int(11) NOT NULL,
`CityID` int(11) DEFAULT NULL,
`VenueName` varchar(50) CHARACTER SET latin1 DEFAULT NULL,
PRIMARY KEY (`VenuesID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
不,没有外键约束。
答案 0 :(得分:0)
(升级到答案)
其他一些表受到引用您尝试更改的列的外键的约束。
您可以通过查询INFORMATION_SCHEMA
:
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
输出中的TABLE_NAME
列表示已定义约束的表。您还可以在SHOW CREATE TABLE [TABLE_NAME]
的输出中或在该表的Sequel Pro的“关系”选项卡中查看约束(请注意,“关系”选项卡仅显示在当前表上定义的外键约束,不引用当前表的那些:因此,您将不得不检查数据库中每个表的“关系”选项卡,以查找引用相关列的任何内容...)。