可以在mysql中为复合键添加外键约束吗?

时间:2013-01-15 01:19:26

标签: mysql sql phpmyadmin

所以我有2张桌子。

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'外键   (schedule_id,第1行的“su”

我做错了什么? 是否更好地将id作为主键并引用而不是使用复合键?

1 个答案:

答案 0 :(得分:2)

columnNames不应该用单引号换行,因为它将被转换为字符串(不再是列

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