[英]mysql cannot add foreign key #1215
我已經閱讀了很多關於這個錯誤的回答問題,但沒有一個答案似乎能幫我解決問題。
我得到的錯誤是
#1215 - Cannot add foreign key constraint
當我show engine innodb status
,它給了我這個信息:
在引用的表中找不到索引,其中引用的列顯示為第一列,或者表中的列類型與引用的表不匹配約束。 請注意,使用> = InnoDB-4.1.12創建的表中ENUM和SET的內部存儲類型已更改,舊表中的此類列不能被新表中的此類列引用。
以下是涉及的表(我正在創建一個創建腳本,並且在執行sql期間出現錯誤)
CREATE TABLE IF NOT EXISTS customer_type (
customer_type_id int(11) unsigned NOT NULL AUTO_INCREMENT,
`type` varchar(128) NOT NULL,
sort int(11) NOT NULL,
is_active tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (customer_type_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS location (
location_id int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(200) NOT NULL,
email varchar(255) DEFAULT NULL,
phone varchar(32) DEFAULT NULL,
address varchar(128) DEFAULT NULL,
city varchar(255) DEFAULT NULL,
postal_code varchar(10) DEFAULT NULL,
shipping_cost float unsigned DEFAULT NULL,
is_active tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (location_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS customer_type_location (
customer_type_id int(11) unsigned NOT NULL,
location_id int(11) unsigned NOT NULL,
PRIMARY KEY (customer_type_id,location_id),
FOREIGN KEY (customer_type_id)
REFERENCES customer_type(customer_type_id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (location_id)
REFERENCES location(location_id)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
我不明白為什么它說我需要索引引用列,因為你可以清楚地看到引用的列是主鍵,應該隱式創建索引。 所以這個錯誤對我來說似乎沒有意義。
我從這個問題的答案中嘗試了大部分建議,但似乎都沒有幫助。
我以前一直使用PostgreSQL,所以我對大多數MySQL錯誤並不是很熟悉,但這個項目要求我使用MySQL。 任何幫助,將不勝感激。
事實證明問題出在數據庫整理上。 我的db collation設置為utf8_general_ci
,但它無法正常工作。 我刪除了數據庫,並使用utf8_unicode_ci
創建了新數據庫,然后按預期工作。 所以似乎數據庫排序規則和表排序規則應該匹配。
從名為“ 使用FOREIGN KEY約束 ”的手冊頁中,摘錄如下:
MySQL需要外鍵和引用鍵的索引,以便外鍵檢查可以快速,不需要表掃描。 在引用表中,必須有一個索引,其中外鍵列以相同的順序列為第一列。 如果引用表不存在,則會自動在引用表上創建此索引。 如果您創建另一個可用於強制執行外鍵約束的索引,則可以稍后以靜默方式刪除此索引。 如果給定,則使用index_name,如前所述。
所以指數很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.