1

私はデータベースを広範囲に使用するPHPアプリケーションに取り組んでいます。データベースを設定した私の同僚は、外部キーを使用するようにテーブルを設定しました。これが私が使用しているステートメントです:

INSERT INTO patients (ethnicity, gender)
VALUES (1, 1);

INSERT INTO sessions (patient_id, submitted, age_in_years, video, annotated)
VALUES (LAST_INSERT_ID(), NOW(), 0, '', FALSE);

最初のステートメントは機能します。ただし、2番目のステートメントで次のエラーが発生します。

#1452-子行を追加または更新できません:外部キー制約が失敗します( `<データベース名>/セッション`、CONSTRAINT` fk_sessions_1`外部キー( `patient_id`)参照`patient`( `id`)ON DELETE CASCADE ON更新カスケード)

LAST_INSERT_ID()期待値を返すことを確認しました。

どうすればこれを修正できますか?

sessions以下は、テーブルの設定方法です。

CREATE TABLE IF NOT EXISTS `sessions` (
  `id` int(11) NOT NULL auto_increment,
  `patient_id` int(11) NOT NULL,
  `severity` enum('Minimal Symptoms of Autism Spectrum Disorder','Mild-to-Moderate Symptoms of Autism Spectrum Disorder','Severe Symtoms of Autism Spectrum Disorder') default NULL,
  `submitted` datetime default NULL,
  `age_in_years` int(11) NOT NULL,
  `video` text NOT NULL,
  `annotated` tinyint(1) default '0',
  PRIMARY KEY  (`id`),
  KEY `fk_sessions_1` (`patient_id`),
  KEY `age_in_years` (`age_in_years`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

ALTER TABLE `sessions`
  ADD CONSTRAINT `fk_sessions_1` FOREIGN KEY (`patient_id`) REFERENCES `patient` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

編集:不要な詳細を削除しました。さらに必要な場合は、この投稿の最初のバージョンをご覧ください。

4

2 に答える 2

1

私の同僚が外部キーを追加したとき、彼は外部キーが参照するテーブル名にタイプミスがあったことがわかりました。

ALTER TABLE `sessions`
  ADD CONSTRAINT `fk_sessions_1` FOREIGN KEY (`patient_id`) REFERENCES `patient` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

する必要があります

ALTER TABLE `sessions`
  ADD CONSTRAINT `fk_sessions_1` FOREIGN KEY (`patient_id`) REFERENCES `patients` (`id`) ON DELETE CASCADE;
于 2012-07-17T01:00:38.503 に答える
0

エラーは、何が問題なのかを正確に示しています。

sessons.patient_idに存在しない値を挿入しようとしていますpatients.id。これは、外部キー制約が設計上どのように機能するかです。LAST_UPDATE_ID()の値が期待どおりであるかどうかに関係なく、値がで有効であることを確認する必要がありますpatients.id

例:

patients
---------------
id    |    name
---------------
1     |    john
2     |    jane

に「3」を挿入しようとすると、に存在しないsessions.patient_idため、表示されるエラーが発生します。idpatients

于 2012-07-16T23:40:25.427 に答える