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デフォルトに設定して機能しました...