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

誰かが私をここで助けて、私が間違ったことを説明できますか?事前にt​​nx。

テーブル構造

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 */;
4

2 に答える 2

1

親テーブルに存在しない値を子テーブルに挿入していることを意味します。次のスキーマを検討してください。

Table1
- ID (PK)
- Name

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

は、列 が列で参照Table2する子テーブルです。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です。

INSERTの値にしようとするとTable2Table1IDに存在しない場合Table1、外部キーによって参照整合性が強制されるため、エラーが発生します。

失敗すると予想されるクエリの例。

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

理由は10、列の値が にTable1ID存在しないためTable1です。ID.

于 2013-03-05T12:22:54.023 に答える
0

現在のテーブルに外部キーを配置した場合、プライマリ列にない外部列にレコードを挿入することはできません。

あなたがテーブルを持っているように

Tbl1主キー:id

      id    username    password
      1     test1       123456
      2     test2       123

2番目のテーブル

Tbl2外部キー:t1_id

      ti_id    fname      address
      1        temp       strret
      3        tesp3      strrr

Tbl1にid=3の列がないため、2番目のレコードを挿入できません。

あなたの場合のこのタイプの問題

于 2013-03-05T12:21:35.083 に答える