2013-03-05 67 views
0

我建立它由3个复选框的调查程序和问题时比唐点击它提交答案,但最近我添加了一个外键,我的表,当我试图提交我得到这个错误答案:forgein关键问题

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。

表结构

我忘了提我使用笨。

凭证表

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 [email protected]_CHARACTER_SET_CLIENT */; 
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */; 
/*!40101 SET [email protected]_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 [email protected]_CHARACTER_SET_CLIENT */; 
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */; 
/*!40101 SET [email protected]_COLLATION_CONNECTION */; 
+0

你能显示这个查询的结论吗? 'DESC tblanswers'和'DESC credentials' – 2013-03-05 12:13:23

+0

如果将外键放在当前表中,则不能在外列中插入记录,而不是在主列中。 – 2013-03-05 12:16:55

+0

对不起,我畏惧明白我是新来的这 – 2013-03-05 12:17:08

回答

1

这只是意味着你在父表上不存在的子表上插入一个值。考虑下面的模式。

Table1 
- ID (PK) 
- Name 

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

Table2是子表哪一列Table1ID refrences上Table1ID

Table1 
ID  Name 
1  John 
2  Hello 

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

正如您所看到的值Table2Table1ID都存在于Table1ID因为它是依赖于Table1

当您尝试INSERTTable2值。 Table1ID不上Table1存在的,因为外键实施参照完整性就会产生一个错误。是预期失败查询

实施例。

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

的原因是因为该值列10Table1ID上不存在Table1ID

+0

你能告诉我我能做些什么来解决这个问题吗?我仍然在学习如何使用MySQL。 – 2013-03-05 12:42:11

+0

当然,如果你可以给表'tblanswers'和'credentials'的表定义。 – 2013-03-05 12:43:06

+0

你的意思是结构? – 2013-03-05 12:47:10

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的列

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