1

while ループが機能しない単純なストアド プロシージャを作成しました。親テーブルは data_client_id です。テーブルはすべて innoDB です。主キーは ID です。data_ プレフィックスを持つスキーマ内の他のすべてのテーブルには、この (data_client_id.id) 列が外部キーとして含まれています。いくつかのダミー データを生成し、主キーを自動インクリメントする data_client_id テーブルに挿入しました。生成された行は 33 から 132 でした。私の意図は、他のすべての data_ テーブルの 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)

次のように、スタンドアロンの INSERT を data_ テーブルに実行してみました。 INSERT into data_banking (id) VALUES (34);

デフォルトですべての列をNULLまたはそれぞれのSETデフォルトに設定して機能しました...

4

1 に答える 1

0

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

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

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

ここにいくつかの便利なヒントとの良いリンクがあります:

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

于 2011-10-14T01:03:30.963 に答える