Mysql
創建FK時Mysql錯誤
這是兩個表的結構
category table CREATE TABLE category ( `catID` bigint(20) NOT NULL AUTO_INCREMENT, `title` varchar(60) NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`catID`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
和第二張桌子
projects
CREATE TABLE `projects` ( `id` int(11) NOT NULL AUTO_INCREMENT, `catID` int(11) NOT NULL, `industryID` int(11) NOT NULL, `dsID` int(11) NOT NULL, `countryID` int(11) NOT NULL, `title` varchar(255) NOT NULL, PRIMARY KEY (`id`), KEY `catID` (`catID`), KEY `industryID` (`industryID`), KEY `dsID` (`dsID`), KEY `countryID` (`countryID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
現在將 FK 添加到表中是查詢,但我不斷收到錯誤
Can't create table .... (errno: 150) ALTER TABLE `projects` ADD CONSTRAINT FK_catID FOREIGN KEY projects (catID) REFERENCES category (catID)
在兩個表之間創建外鍵時,參與關係的列的數據類型必須具有相同的數據類型。在您上面發布的範例中,它失敗了,因為
Categories
表定義CatID
為BIGINT
wheras 在Projects
表中您已將其定義為INT
. 將表中CatID
的數據類型更改為應該可以解決您的問題。Projects``BIGINT
我希望這可以幫助你。
外鍵約束的數據類型/大小/簽名必須相同。
`category`.`catID` bigint(20) `projects`.`catID` int(11)
兩者都使用 bigint 或兩者都使用 int。
此外,即使它有效,此語句也可能不會完全按照您的意圖進行:
ALTER TABLE `projects` ADD CONSTRAINT FK_catID FOREIGN KEY projects (catID) REFERENCES category (catID) -- this position is an optional index name, not a table name ^^^^^
您可能打算這樣做,而不是:
ALTER TABLE `projects` ADD CONSTRAINT FK_catID FOREIGN KEY (catID) REFERENCES category (catID)
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) REFERENCES tbl_name (index_col_name,...) [ON DELETE RESTRICT | CASCADE | SET NULL | NO ACTION] [ON UPDATE RESTRICT | CASCADE | SET NULL | NO ACTION]