2013-01-15 65 views
1

所以我有2張桌子。它可以添加一個外鍵約束到MySQL中的複合鍵?

subject_schedule:

CREATE TABLE IF NOT EXISTS `subject_schedule` (
    `subject` varchar(10) NOT NULL, 
    `schedule_id` int(11) NOT NULL, 
    `id` int(11) NOT NULL, 
    PRIMARY KEY (`subject`,`schedule_id`), 
    KEY `schedule_id` (`schedule_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

和預約:

CREATE TABLE IF NOT EXISTS `appointment` (
    `work_plan` varchar(1000) DEFAULT NULL, 
    `date` date DEFAULT NULL, 
    `homework_given` varchar(1000) DEFAULT NULL, 
    `tutor_comments` varchar(1000) DEFAULT NULL, 
    `admin_comments` varchar(1000) DEFAULT NULL, 
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `schedule_id` int(11) NOT NULL, 
    `attended` tinyint(1) NOT NULL DEFAULT '1', 
    `arrival_time` time DEFAULT NULL, 
    `departure_time` time DEFAULT NULL, 
    `homework_completed` tinyint(1) NOT NULL DEFAULT '0', 
    `subject` varchar(10) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `schedule_id` (`schedule_id`), 
    KEY `subject` (`subject`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10004 ; 

我想創建它引用任命複合鍵的外鍵。我曾嘗試:

ALTER TABLE 'appointment' 
ADD CONSTRAINT 'appointment_fk' FOREIGN KEY (`schedule_id`, `subject`) 
REFERENCES 'subject_schedule' ('schedule_id', 'subject'); 

但它返回在phpMyAdmin的錯誤:

#1064 - 您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用 附近'約會「正確的語法手動添加約束‘appointment_fk’FOREIGN KEY (schedule_id,'蘇」在行1

我在做什麼錯? 只需要一個id作爲主鍵和參考,而不是使用複合鍵?

回答

2

columnNames不應該用單引號包裝,因爲它會轉換爲字符串(不是一個立柱

ALTER TABLE appointment 
ADD CONSTRAINT appointment_fk FOREIGN KEY (`schedule_id`, `subject`) 
REFERENCES subject_schedule (schedule_id, subject); 
+1

這並沒有幫助。仍然收到相同的錯誤 – user1975196

+0

@ user1975196點擊sql小提琴鏈接 –

+0

Thankyou它的工作!我只需更新我的一些記錄以符合約束條件。 – user1975196