有2张表,student表的主键id,同时为teacher表的外键。而teacher表的主键id也同时为student表的外键。这样一来,想删除任何一张表,都无法删除。那2张表是通过hibernate映射建出来的,哎,弄了半天也不知道怎么弄,先谢谢大家了啊
错误如下:
mysql> drop table student;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint failsmysql> drop table teacher;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint failsmysql> show create table student;
| student | CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `teacher_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FKF3371A1BA1548DAC` (`teacher_id`),
  CONSTRAINT `FKF3371A1BA1548DAC` FOREIGN KEY (`teacher_id`) REFERENCES `teacher
` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gbk |mysql> show create table teacher;
| teacher | CREATE TABLE `teacher` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `student_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FKD6A63C290B9430C` (`student_id`),
  CONSTRAINT `FKD6A63C290B9430C` FOREIGN KEY (`student_id`) REFERENCES `student`
 (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gbk |

解决方案 »

  1.   

    set @@foreign_key_checks=off;
    drop table student;
    drop table teacher;
    set @@foreign_key_checks=on;
      

  2.   

    把外键约束去掉
    SET FOREIGN_KEY_CHECKS = 0;
    drop table student; 
    drop table teacher;
    SET FOREIGN_KEY_CHECKS = 1;
      

  3.   

    其实没必要禁止外键约束,把约束关系改为cascade就可以?