0

我正在构建一个调查应用程序,它包含 3 个复选框和一个问题,当单击按钮时它会提交答案,但最近我在表中添加了一个外键,当我尝试提交答案时出现此错误:

A Database Error Occurred

Error Number: 1452

Cannot add or update a child row: a foreign key constraint fails (`user_test`.`tblanswers`, CONSTRAINT `tblanswers_ibfk_1` FOREIGN KEY (`answerid`) REFERENCES `credentials` (`cid`) ON UPDATE CASCADE)

INSERT INTO `tblanswers` (`questionid`, `answerA`, `answerB`, `answerC`, `comment`, `cid`) VALUES ('melynas ', 'melynas ', 'baltas', 'geltonas', 'testas', NULL)

Filename: C:\wamp\www\Surva\system\database\DB_driver.php

Line Number: 330

谁能在这里帮助我并解释我做错了什么?tnx 提前。

表结构

我忘了提到我正在使用codeigniter。

凭据表

IF NOT EXISTS `credentials` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `second_name` varchar(255) NOT NULL,
  `phone` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=98 ;

--
-- Constraints for dumped tables
--

--
-- Constraints for table `credentials`
--
ALTER TABLE `credentials`
  ADD CONSTRAINT `credentials_ibfk_1` FOREIGN KEY (`cid`) REFERENCES `tblanswers` (`answerid`) ON UPDATE CASCADE;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION 

答案

CREATE TABLE IF NOT EXISTS `tblanswers` (
  `answerid` int(11) NOT NULL AUTO_INCREMENT,
  `userid` int(11) DEFAULT NULL,
  `cid` int(11) DEFAULT NULL,
  `questionid` int(11) NOT NULL,
  `answerA` varchar(255) NOT NULL,
  `answerB` varchar(255) NOT NULL,
  `answerC` varchar(255) NOT NULL,
  `comment` varchar(255) NOT NULL,
  PRIMARY KEY (`answerid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=205 ;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
4

2 回答 2

1

这只是意味着您要在父表上不存在的子表上插入一个值。考虑以下架构。

Table1
- ID (PK)
- Name

Table2
- RecID (PK)
- OtherColumn
- Table1ID (FK)

是列引用的Table2子表column 。Table1IDTable1ID

Table1 
ID      Name
1       John
2       Hello

Table2
RecID   OtherColumn     Table1ID
1       asd             1
2       qwe             2
3       rty             1

如您所见, 的值Table2Table1ID都出现在Table1. ID因为它依赖于Table1.

当您尝试INSERTTable2. Table1ID上不存在的Table1,它将产生错误,因为外键强制引用完整性。

预期会失败的查询示例。

INSERT INTO Table2 (RecID, OtherColumn, Table1ID)
VALUES (1, 'xxx', 10)

原因是10column的值Table1ID不存在于Table1. ID.

于 2013-03-05T12:22:54.023 回答
0

如果您将外键放在当前表中,那么您不能在外列中插入不在主列中的记录。

就像你有桌子

tbl1主键:id

      id    username    password
      1     test1       123456
      2     test2       123

你的第二张桌子

Tbl2 外键:t1_id

      ti_id    fname      address
      1        temp       strret
      3        tesp3      strrr

您不能插入第二条记录,因为 Tbl1 中没有 id=3 的列

在你的情况下这种类型的问题

于 2013-03-05T12:21:35.083 回答