我正在构建一个调查应用程序,它包含3个复选框和一个问题,当点击butten它提交答案但最近我在我的表中添加了一个外键,当我尝试提交答案时我收到此错误:
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
tblanswers
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 */;
答案 0 :(得分:1)
这只是意味着您在子表上插入一个父表上不存在的值。请考虑以下架构。
Table1
- ID (PK)
- Name
Table2
- RecID (PK)
- OtherColumn
- Table1ID (FK)
Table2
是Table1ID
列Table1
列ID
列的子表。
Table1
ID Name
1 John
2 Hello
Table2
RecID OtherColumn Table1ID
1 asd 1
2 qwe 2
3 rty 1
正如您所看到的Table2
。Table1ID
的值都显示在Table1
。ID
上,因为它取决于Table1
。
当您尝试INSERT
Table2
上Table1ID
Table1
的值INSERT INTO Table2 (RecID, OtherColumn, Table1ID)
VALUES (1, 'xxx', 10)
时,它会生成错误,因为外键会强制执行参照完整性。
预计会失败的查询示例。
10
原因是因为Table1ID
Table1
ID
上没有列{{1}}的值{{1}}。
答案 1 :(得分: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
你的案例中的这类问题