删除数据表单表的外键约束错误

时间:2014-05-15 04:45:03

标签: mysql key

我正在进行一项关于在线考试的项目,该项目是从我的大四学生那里复制的,但是在执行时我遇到了一些错误。在这里附上我的代码和错误信息。

表#:

CREATE TABLE IF NOT EXISTS `question` (
  `testid` bigint(20) NOT NULL DEFAULT '0',
  `qnid` int(11) NOT NULL DEFAULT '0',
  `question` varchar(500) DEFAULT NULL,
  `optiona` varchar(100) DEFAULT NULL,
  `optionb` varchar(100) DEFAULT NULL,
  `optionc` varchar(100) DEFAULT NULL,
  `optiond` varchar(100) DEFAULT NULL,
  `correctanswer` enum('optiona','optionb','optionc','optiond') DEFAULT NULL,
  `marks` int(11) DEFAULT NULL,
  PRIMARY KEY (`testid`,`qnid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-

- 转储表question

的数据
INSERT INTO `question` (`testid`, `qnid`, `question`, `optiona`, `optionb`, `optionc`,     `optiond`, `correctanswer`, `marks`) VALUES
(1, 1, 'why use photoshop', 'image retouching', 'image making', 'image destroying',     'color coreection', 'optiona', 1),
(2, 1, 'java is', 'fish fry', 'software language', 'programing language', 'web maker',     'optionc', 1),
(2, 2, 'what is vaja', 'bengali', 'kokl', 'khsd', 'kojsgf', 'optiona', 1);

表###

-

- 表student

的表结构
CREATE TABLE IF NOT EXISTS `student` (
 `stdid` bigint(20) NOT NULL,
 `stdname` varchar(40) DEFAULT NULL,
 `stdpassword` varchar(40) DEFAULT NULL,
 `emailid` varchar(40) DEFAULT NULL,
 `contactno` varchar(20) DEFAULT NULL,
 `address` varchar(40) DEFAULT NULL,
 `city` varchar(40) DEFAULT NULL,
 `pincode` varchar(20) DEFAULT NULL,
 PRIMARY KEY (`stdid`),
 UNIQUE KEY `stdname` (`stdname`),
 UNIQUE KEY `emailid` (`emailid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-

- 表studentquestion

的表结构
CREATE TABLE IF NOT EXISTS `studentquestion` (
  `stdid` bigint(20) NOT NULL DEFAULT '0',
  `testid` bigint(20) NOT NULL DEFAULT '0',
  `qnid` int(11) NOT NULL DEFAULT '0',
  `answered` enum('answered','unanswered','review') DEFAULT NULL,
  `stdanswer` enum('optiona','optionb','optionc','optiond') DEFAULT NULL,
  PRIMARY KEY (`stdid`,`testid`,`qnid`),
  KEY `testid` (`testid`,`qnid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Constraints for table `question`
--
ALTER TABLE `question`
  ADD CONSTRAINT `question_ibfk_1` FOREIGN KEY (`testid`) REFERENCES `test` (`testid`);

--
-- Constraints for table `studentquestion`
--
ALTER TABLE `studentquestion`
  ADD CONSTRAINT `studentquestion_ibfk_1` FOREIGN KEY (`stdid`) REFERENCES `student`     (`stdid`),
  ADD CONSTRAINT `studentquestion_ibfk_2` FOREIGN KEY (`testid`, `qnid`) REFERENCES     `question` (`testid`, `qnid`);

错误消息

无法删除或更新父行:外键约束失败(oesstudentquestion,CONSTRAINT studentquestion_ibfk_2 FOREIGN KEY(testidqnid)参考questiontestidqnid))

1 个答案:

答案 0 :(得分:0)

也许这不是你的完整剧本。 很可能数据插入的顺序错误。发生此错误的原因是,表studentquestion已经包含testidqnid字段的数据,这些字段不存在question主表。您必须重新排序insert-statements,以便首先填充主表,然后填充详细信息表。