更改mysql中的外键属性

时间:2013-05-07 23:19:38

标签: mysql sql foreign-keys

是否可以更改键/外键的属性(不删除并重新创建)?

我有以下结构:

CREATE TABLE `articles` (
..
`LKZ` smallint(3) NOT NULL,
`FID` int(4) NOT NULL,
..
) ;
CREATE TABLE `firm` (
`LKZ` smallint(3) NOT NULL,
`FID` int(4) NOT NULL,
`Name` text NOT NULL,
PRIMARY KEY (`LKZ`,`FID`),
KEY `FID` (`FID`)
);
ALTER TABLE `firm`
ADD CONSTRAINT `firm_ibfk_1` FOREIGN KEY (`LKZ`) REFERENCES `articles` (`LKZ`) ON DELETE NO ACTION,
ADD CONSTRAINT `firm_ibfk_2` FOREIGN KEY (`FID`) REFERENCES `articles` (`FID`);

我想将属性UNSIGNED ZEROFILL添加到字段FIDLKZ

ALTER TABLE `articles` CHANGE `LKZ` `LKZ` SMALLINT( 3 ) UNSIGNED ZEROFILL NOT NULL, CHANGE `FID` `FID` INT( 4 ) UNSIGNED ZEROFILL NOT NULL;
ALTER TABLE `firm` CHANGE `LKZ` `LKZ` SMALLINT( 3 ) UNSIGNED ZEROFILL NOT NULL, CHANGE `FID` `FID` INT( 4 ) UNSIGNED ZEROFILL NOT NULL 

但即使两个表都出现以下错误:

#1025 - Error on rename of '.\pindex\#sql-3eec4_ef' to '.\pindex\articles' (errno: 150) 

1 个答案:

答案 0 :(得分:0)

查看您的外键。可能还有另一个表,其中一个外键引用了您尝试更改的主键。

如果还应该尝试找出导致错误的表。为此,您可以运行SHOW ENGINE INNODB STATUS,然后在STATUS列上查看“LATEST FOREIGN KEY ERROR”部分。

请记住,外键名称是全局的,在数据​​库上下文中必须是唯一的。