/ / mySQLでストアドプロシージャを実行しようとすると、外部キー制約で失敗します - mysql、ストアドプロシージャ、コマンドラインインターフェイス、mysql-error-1452

mySQLでストアドプロシージャを実行しようとすると、外部キー制約(mysql、ストアドプロシージャ、コマンドラインインターフェイス、mysql-error-1452)に失敗します。

私はしばらくの間簡単なストアドプロシージャを書きましたループしています "が動作していません。 ここにいくつかのデータがあります。 親テーブルはdata_client_idです。テーブルはすべてinnoDBです。主キーはIDです。 data_接頭部を持つスキーマ内の他のすべての表には、この(data_client_id.id)列が外部キーとして含まれています。 ダミーデータを生成し、それをdata_client_idテーブルに挿入しました。これは主キーを自動インクリメントします。生成された行は33から132でした。私の目的は、他のすべてのdata_tableのid列に一致する値を持つ行を作成するストアドプロシージャを1つ作成することでした。

ここに私のコードです:

mysql> DELIMITER //
mysql> CREATE PROCEDURE this()
-> BEGIN
-> DECLARE v1 INT;
-> SET v1 = 33;
-> WHILE v1 < 132 DO
-> INSERT INTO data_banking (id) VALUES(v1);
-> SET v1 = v1+1;
-> END WHILE;
-> END//
Query OK, 0 rows affected (0.00 sec)

それから私がthis()を呼び出すと。手順以下のエラーが発生します。

mysql> call this();
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails             (`oms_clients`.`data_banking`, CONSTRAINT `data_banking_FK` FOREIGN KEY (`id`) REFERENCES  `data_client_id` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

私はちょうどこのようにdata_テーブルにスタンドアロンINSERTを実行しようとしました: data_banking(id)に挿入します。VALUES(34);

そして、それはデフォルトでNULLまたはそれらのそれぞれのSETデフォルトですべてのカラムを設定することに働きました...

回答:

回答№1は0

ストアドプロシージャに問題はありません。

問題は、SAME IDがdata_client_idにも存在しない限り、data_bankingにランを挿入できないことです。 id、33から132。

問題を解決するには、制約を削除するか、外部キーの依存関係が解決されていることを確認してください。

ここにいくつかの役に立つヒントがあります。

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