2

だから私は2つのテーブルを持っています。

件名_スケジュール:

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 構文にエラーがあります。Near ''appointment' ADD CONSTRAINT 'appointment_fk' FOREIGN KEY ( schedule_id, `su' at line 1

私は何を間違っていますか?複合キーを使用する代わりに、id を主キーとして参照する方が良いですか?

4

1 に答える 1

2

columnNames は文字列に変換されるため (もはや列ではありません) 、一重引用符で囲む必要はありません。

ALTER TABLE appointment
ADD CONSTRAINT appointment_fk FOREIGN KEY (`schedule_id`, `subject`) 
REFERENCES subject_schedule (schedule_id, subject);
于 2013-01-15T01:21:17.773 に答える