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

MySQLエラー1452-追加できない、または子行:外部キー制約が失敗する


エラー1452を理解するには、最初にテーブルを作成し、外部キー制約を使用してそれを別のテーブルに関連付ける必要があります。

最初のテーブルの作成-

mysql> CREATE table ForeignTable
-> (
-> id int,
-> name varchar(200),
-> Fk_pk int
-> );
Query OK, 0 rows affected (0.43 sec)

最初のテーブルを正常に作成したら、2番目のテーブルを作成します-

mysql> CREATE table primaryTable1
-> (
-> Fk_pk int,
-> DeptName varchar(200),
-> Primary key(Fk_pk)
-> );
Query OK, 0 rows affected (0.48 sec)

これで、両方のテーブルが作成されました。次に、両方のテーブルは、外部キー制約を追加するだけでなく、altercommandの助けを借りて関連付けられます。構文は次のとおりです-

alter table yourFirstTable add constraint anyConstraintName foreign key(column_name which is
acts foreign key in second table) yourSecondTable(column_name which acts primary key in
second table).

ここで、上記のクエリを使用して両方のテーブルを関連付けます。これは次のように与えられます-

mysql> alter table ForeignTable add constraint constFKPK foreign key(Fk_pk) references
primaryTable1(Fk_pk);
Query OK, 0 rows affected (1.57 sec)
Records: 0 Duplicates: 0 Warnings: 0

これで、両方のテーブルが関連付けられました。レコードは、次のようにテーブル「foreignTable」に挿入されます-

mysql> INSERT into ForeignTable values(1,'John',1);

これにより、以下の出力に示すエラーが発生します-

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails
(`business`.`foreigntable`, CONSTRAINT `constFKPK` FOREIGN KEY (`Fk_pk`)
REFERENCES `primarytable1` (`fk_pk`))

上記の出力では、「子行を追加または更新できません:外部キー制約が失敗します」というエラーが発生しています。以下に示すように、テーブルprimaryTable1にレコードを挿入することで、このエラーを取り除くことができます-

mysql> INSERT into primaryTable1 values(1,'ComputerScience');
Query OK, 1 row affected (0.14 sec)

テーブルprimaryTable1にレコードを挿入した後、エラーなしで必要なレコードをテーブルForeignTableに挿入できます。これを以下に示します-

mysql> INSERT into ForeignTable values(1,'John',1);
Query OK, 1 row affected (0.13 sec)

これで、selectコマンドを使用してForeignTableのテーブルレコードを表示できます。これは次のとおりです-

mysql> SELECT * from ForeignTable;

上記のクエリの出力は-

です。
+------+------+-------+
| id   | name | Fk_pk |
+------+------+-------+
| 1    | John | 1     |
+------+------+-------+
1 row in set (0.00 sec)

selectコマンドを使用してprimarytable1のテーブルレコードを表示することもできます。これは次のとおりです-

mysql> SELECT * from primarytable1;

上記のクエリの出力は-

です。
+-------+-----------------+
| Fk_pk | DeptName        |
+-------+-----------------+
| 1     | ComputerScience |
+-------+-----------------+
1 row in set (0.00 sec)

エラー1452 -子行を追加または更新できません。データレコードが最初にForeignTableに挿入されたときに、外部キー制約が失敗します。

Note: First, add the record into the second table i.e primarytable1 to avoid the above error.

  1. MySQLのさまざまなテーブルに対して主キーを外部として参照するにはどうすればよいですか?

    以下は構文です- alter table yourSecondTableName add constraint `yourConstraintName` foreign key(`yourSecondTableNamePrimaryKey`) references yourFirstTableName(yourFirstTablePrimaryKeyColumnName); 上記の構文を理解するために、最初にテーブルを作成しましょう- mysql> create table demo65 −> ( −> id int not null primary

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

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