0
CREATE TABLE `class` (
`class_id` int(11) NOT NULL AUTO_INCREMENT,
`section_name` varchar(50) NOT NULL,
`class_alias` varchar(200) NOT NULL,
`grading_scheme` int(11) NOT NULL DEFAULT '0',
`year` year(4) NOT NULL,
`grade_calc_method_id` varchar(20) DEFAULT NULL,
PRIMARY KEY (`class_id`)
) ENGINE=InnoDB AUTO_INCREMENT=48819 DEFAULT CHARSET=latin1;
CREATE TABLE `teachers` (
`teacher_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`teacher_subject` varchar(20) NOT NULL DEFAULT 'None',
PRIMARY KEY (`teacher_id`),
KEY `user_id` (`user_id`,`school_id`)
) ENGINE=InnoDB AUTO_INCREMENT=48606 DEFAULT CHARSET=latin1;
CREATE TABLE `teacher_classes` (
`teacher_class_id` int(11) NOT NULL AUTO_INCREMENT,
`teacher_id` int(11) NOT NULL,
`class_id` int(11) NOT NULL,
PRIMARY KEY (`teacher_class_id`),
UNIQUE KEY `teacher_id_class_id` (`teacher_id`,`class_id`),
KEY `teacher_id` (`teacher_id`,`class_id`)
) ENGINE=InnoDB AUTO_INCREMENT=46707 DEFAULT CHARSET=latin1;
はここで別のジャンクションテーブルteacher_classes
を持って失敗しました外部キー制約を追加するためのクエリですは、子行を追加または更新できません:外部キー制約は、DBMSがerrors.Iをチェックできるように、外部キーを使用してテーブル間のデータの一貫性を確保しようとすると、mysqlの
ALTER TABLE teacher_classes
ADD CONSTRAINT `tc_fk_class_id` FOREIGN KEY (`class_id`)
REFERENCES class (`class_id`) ON UPDATE NO ACTION ON DELETE NO ACTION,
ADD CONSTRAINT `tc_fk_teacher_id` FOREIGN KEY (`teacher_id`)
REFERENCES teachers (`teacher_id`) ON UPDATE NO ACTION ON DELETE NO ACTION;
このトピックに関する他の投稿も見ましたが、次のエラーが発生します。
は、子行を追加または更新できません:外部キー制約が を失敗(
DB_NAME
を#sql-403_12
、CONSTRAINTtc_fk_teacher_id
FOREIGN KEY(teacher_id
)teachers
(teacher_id
を参照)ON UPDATE ON NO ACTIONのNO ACTIONを削除しない。)
MySQLは、データが一致していないことを言っているあなたの子テーブルに同じ定義を持っていることを確認してください。テーブル 'teachers'の' teacher_id'が 'teacher_classes'テーブルのidと一致しません。おそらく、 'teachers_classes'に' teachers 'というテーブルに存在しないidがあります – Sablefoste
私は自分の質問を編集しました – deadman