2016-11-30 128 views
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; 

尝试使用外键,以确保表之间数据的一致性,使得数据库管理系统可以检查errors.I有另一个结表teacher_classes
这里是我的查询添加外键约束不能添加或更新子行,外键约束失败的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,约束 tc_fk_teacher_id外键(teacher_id)参考文献teachersteacher_id)ON DELETE NO ACTION ON UPDATE NO ACTION)

+0

MySQL是告诉你的是,数据不匹配。表'teachers'中的'teacher_id'与表'teacher_classes'中的id不匹配。 'teacher_classes'中可能有一个id不存在于表'teachers'中 – Sablefoste

+0

我编辑了我的问题 – deadman

回答

0

这很可能是列定义不正确。对于表teachers PK列定义如下。

`teacher_id` int(11) NOT NULL AUTO_INCREMENT 

请确保您有相同的定义在你的子表teacher_classes