MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLエラー1452-子行を追加または更新できません:外部キー制約が失敗しますか?


このエラーは、テーブル間に外部キー制約を追加し、子テーブルにレコードを挿入するたびに発生します。例を見てみましょう。

子テーブルを作成します。

mysql> create table ChildDemo
   -> (
   -> id int,
   -> FKPK int
   -> );
Query OK, 0 rows affected (0.86 sec)

2番目のテーブルを作成します。

mysql> create table ParentDemo
   -> (
   -> FKPK int,
   -> Name varchar(100)
   -> ,
   -> primary key(FKPK)
   -> );
Query OK, 0 rows affected (0.57 sec)
>

外部キー制約を追加します。

mysql> alter table ChildDemo add constraint ConstChild foreign key(FKPK) references ParentDemo(FKPK);
Query OK, 0 rows affected (1.97 sec)
Records: 0  Duplicates: 0  Warnings: 0

外部キー制約を作成した後、最初のテーブルまたは子テーブルにレコードを挿入するたびに、上記のエラーが発生します。

mysql> insert into ChildDemo values(1,3);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`business`.`childdemo`, CONSTRAINT `ConstChild` FOREIGN KEY (`FKPK`) REFERENCES `parentdemo` (`fkpk`))

エラーは、他のテーブルに一致する行がない行を追加しようとしたときに発生します。

述べたように

「外部キーの関係には、中央のデータ値を保持する親テーブルと、その親を指す同一の値を持つ子テーブルが含まれます。 FOREIGN KEY句は、子テーブルで指定されます。親テーブルに一致する候補キー値がない場合、子テーブルに外部キー値を作成しようとするINSERTまたはUPDATE操作はすべて拒否されます。」


  1. MySQLテーブルをJavaMySQLで更新します

    このためには、JavaでPreparedStatementを使用して更新する必要があります。まずテーブルを作成しましょう- mysql> create table DemoTable(    Id int,    FirstName varchar(40) ); Query OK, 0 rows affected (0.62 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mysql> insert into DemoTable values(100,'Chris'); Query OK, 1

  2. MySQLでの外部キーの使用

    MySQLで外部キーを使用する方法を理解しましょう- InnoDBテーブルは、外部キー制約のチェックをサポートしています。 2つのテーブルを結合するためだけに、外部キー制約は必要ありません。 InnoDB以外のストレージエンジンで使用する必要のある列を定義するときに使用できます。 REFERENCES tableName(colName)は実際の効果はなく、現在定義されている列が別のテーブルの列を参照することを意図しているというユーザーへのコメントとして機能します。 MySQLは、「colName」が実際に「tableName」に存在すること、または「tableName」自体が実際に存在す