2012-12-05 225 views
2

我已經按照我的數據庫2個表:外鍵約束錯誤1005

CREATE TABLE `address` (
    `id` bigint(20) NOT NULL auto_increment, 
    `entity_creation_timestamp` datetime default NULL, 
    `entity_version` bigint(20) default NULL, 
    `city` varchar(255) default NULL, 
    `country` varchar(255) NOT NULL, 
    `county` varchar(255) default NULL, 
    `label` varchar(255) default NULL, 
    `line1` varchar(255) default NULL, 
    `line2` varchar(255) default NULL, 
    `line3` varchar(255) default NULL, 
    `state` varchar(255) NOT NULL, 
    `zip` varchar(255) NOT NULL, 
    `zip_extension` varchar(255) default NULL, 
    `party_id` bigint(20) default NULL, 
    `list_index` int(11) default NULL, 
    `last_updated_timestamp` datetime default NULL, 
    PRIMARY KEY (`id`), 
    KEY `fk_party_postaladdress_id` (`party_id`), 
    CONSTRAINT `fk_party_postaladdress_id` FOREIGN KEY (`party_id`) REFERENCES `sims_party` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

另一個:

CREATE TABLE `state` (
    `state` varchar(255) NOT NULL, 
    `name` varchar(255) default NULL, 
    PRIMARY KEY (`state`), 
    KEY `pk_state` (`state`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

我想申請在「狀態」列外鍵約束「地址」表中的「狀態」表「姓名」列..

我使用對於相同的命令是:

ALTER TABLE address 
    ADD CONSTRAINT FK_address_state FOREIGN KEY (state) 
    REFERENCES state(state) ON DELETE RESTRICT ON UPDATE RESTRICT; 

但每次我運行此命令時,我得到以下錯誤:

ERROR 1005 (HY000): Can't create table 'db.#sql-75c_da' (errno: 150) 

任何想法,它去錯了... ???

+1

什麼樣的數據庫?哪個引擎? - 編輯:剛注意到它的InnoDB,也許你應該在問題和標籤中更清楚一點。 – Dror

+0

刪除'fk_party_postaladdress_id'約束後,您的DDL在MySQL 5.5上運行時沒有錯誤。 (因爲您沒有爲其引用的表發佈DDL,所以已刪除。) –

回答

0

如果MySQL從CREATE TABLE語句報告錯誤編號1005,並且錯誤消息引用了錯誤150,則表的創建失敗,因爲外鍵約束未正確形成。同樣,如果一個ALTER TABLE失敗並且引用了錯誤150,那就意味着一個外鍵的定義將不正確地爲修改後的表格形成。要顯示服務器最近的InnoDB外鍵錯誤的詳細解釋,問題SHOW ENGINE INNODB STATUS

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html