道歉,如果這是一個新手問題,但我一直無法解決這個問題一段時間,我希望有人更好地理解MySQL可以協助我在解密以下問題:
我有兩個表,我想維護,以便用戶可以定義他們的偏好,而管理員可以保持他們的訪問權限,這些偏好。我想確保,如果管理員刪除某些權利,即偏好表得到更新:
這兩個表是:MySQL錯誤1072:國家密鑰不存在,但它確實存在
main_access
+--------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+-------+
| nav_location | int(11) | NO | PRI | NULL | |
| user_id | int(11) | NO | PRI | NULL | |
+--------------+---------+------+-----+---------+-------+
和
main_prefs
+--------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+-------+
| nav_location | int(11) | NO | PRI | NULL | |
| user_id | int(11) | NO | PRI | NULL | |
+--------------+---------+------+-----+---------+-------+
他們都有唯一索引,我運行這個:
CREATE TABLE IF NOT EXISTS main_access (
nav_location integer not null,
user_id integer not null,
unique index uk_access (nav_location, user_id)
);
CREATE TABLE IF NOT EXISTS main_pref (
nav_location integer not null,
user_id integer not null,
unique index uk_pref (nav_location, user_id)
);
所以,uk_access,和uk_pref與上述表正在創建。然而,當我運行:
ALTER TABLE main_pref
ADD CONSTRAINT FK_access1
FOREIGN KEY(uk_pref) REFERENCES main_access(uk_access)
ON UPDATE CASCADE
ON DELETE CASCADE;
我得到的 「ERROR 1072(42000):鍵列 'uk_pref' 不存在表」 的錯誤。對我來說,哪一個得到零感覺。我知道密鑰的存在,我也創建了表之後運行以下:
ALTER TABLE main_pref ADD UNIQUE INDEX uk_pref (nav_location, user_id);
,並得到了重複鍵警告。我對另一張桌子做了同樣的事情。
我也嘗試使兩個表的唯一索引名稱相同。也就是說,我讓他們都uk_pref
,無濟於事。同樣的錯誤。
我覺得這是一個非常簡單的問題,我錯過了,但一直沒有看到它。我希望另一組眼睛會指出我犯的錯誤。任何幫助深表感謝!
我尋找類似的問題,但在這裏找不到解決同一問題的任何問題。
編輯:AJ指出了這一點,我忘了提,我試了一下:
我也(第一個)試圖繞過設置唯一的密鑰,並做了以下內容:
ALTER TABLE main_pref
ADD CONSTRAINT FK_access1
FOREIGN KEY(user_id, nav_location) REFERENCES main_access(user_id, nav_location)
ON UPDATE CASCADE
ON DELETE CASCADE;
和MySQL剛回來一個語法錯誤。
您確定可以針對索引創建外鍵約束嗎?如果您將uk_pref索引中的列指定爲元組而不是索引名稱,那該怎麼辦? –
你的意思是我爲什麼不嘗試:ALTER TABLE main_pref ADD CONSTRAINT FK_access1 FOREIGN KEY(user_id,nav_location)REFERENCES main_access(user_id,nav_location)ON UPDATE CASCADE ON DELETE CASCADE ;?如果是這樣,我試過了,它會產生語法錯誤。另外,我很確定,但不是100%肯定的。我想是的,基於這個線程http://forums.mysql.com/read.php?135,427283,427283#msg-427283 – Thumper
k - 我沒有看到你的o.p.你曾嘗試過這種方法。 –