我在MySQL的InnoDB表像創建:MySQL的 - 不能添加外鍵
CREATE TABLE `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`type` enum('MANUAL','FACEBOOK') NOT NULL DEFAULT 'MANUAL',
`role` enum('COOK','HOST','ALL') NOT NULL DEFAULT 'ALL',
`about_me` varchar(1000) DEFAULT NULL,
`food_preferences` varchar(1000) DEFAULT NULL,
`cooking_experience` varchar(1000) DEFAULT NULL,
`with_friend` bit(1) DEFAULT b'0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
接下來,我嘗試添加一個表,這樣的聲明(無外鍵在創建表與有問題的補充那):
CREATE TABLE `messages` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`from` bigint(20) NOT NULL,
`to` bigint(20) NOT NULL,
`content` varchar(10000) NOT NULL,
`timestamp_sent` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`timestamp_read` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
有表創建的,我需要最後在'from'
和'to'
領域引用'users'.'id'
字段添加外鍵:
ALTER TABLE `messages`
ADD CONSTRAINT `messages_users_fk`
FOREIGN KEY (`from` , `to`)
REFERENCES `users` (`id` , `id`)
ON DELETE SET NULL
ON UPDATE CASCADE
, ADD INDEX `messages_users_fk_idx` (`from` ASC, `to` ASC)
我得到的錯誤是:
ERROR: Error 1822: Failed to add the foreign key constraint. Missing index for constraint 'messages_users_fk' in the referenced table 'users'.
但「用戶」表上'id'
一個PRIMARY
指數...
也試過做一個小的步驟加入外鍵只爲'from'
場:
ALTER TABLE `messages`
ADD CONSTRAINT `messages_users_fk`
FOREIGN KEY (`from`)
REFERENCES `users` (`id`)
ON DELETE SET NULL
ON UPDATE CASCADE
, ADD INDEX `messages_users_fk_idx` (`from` ASC) ;
的錯誤是稍有不同:
ERROR: Error 1825: Failed to add the foreign key constraint on table 'messages'. Incorrect options in FOREIGN KEY constraint 'cook4food/messages_users_fk'.
字段類型相同(bigint(20) NOT NULL
),因爲它被認爲是其他StackOverflow線程中問題的原因。我的表沒有分區(MySQL手冊聲明這是對InnoDB中的外鍵約束的限制)。 'messages'
表目前不存在任何行,因此存儲的數據不能以任何方式出現問題。我卡住了,請幫忙。
+1很可愛地看到實際的CREATE TABLE語句和他們一起玩:) – 2013-03-11 12:34:53