同じテーブルを更新するための MySQL トリガーの回避策
MySQL は本質的にトリガーが割り当てられている同じテーブル内の行を更新することを制限しており、再帰呼び出しを防止します。 。この制限にもかかわらず、実行可能な回避策は存在します。
推奨される回避策
トリガー内の行を直接更新する代わりに、目的のロジックを実行するストアド プロシージャを利用します。この方法により、行更新タスクがトリガーから分離され、制限を回避できるようになります。
例
次のシナリオを考えてみましょう:
CREATE TABLE MyTable (
id INT PRIMARY KEY,
attribute VARCHAR(255)
);
-- Trigger to insert a row into MyTable for each new parent product record
CREATE TRIGGER my_trigger AFTER INSERT ON Products
FOR EACH ROW
BEGIN
-- Issue SQL statement to call a stored procedure that performs the insert
CALL insert_attribute(NEW.id, 'Value');
END;
上記の例では、トリガー my_trigger はストアド プロシージャ insert_attribute を呼び出し、新しいレコードが Products テーブルに挿入されるときに MyTable に行を挿入します。 trigger.
追加の考慮事項
この回避策は機能的な解決策として機能しますが、パフォーマンスと保守性の点で従来のトリガーとは異なることに注意することが重要です。ストアド プロシージャは、直接トリガー更新と比較して、データベース システムに追加のオーバーヘッドと複雑さをもたらす可能性があります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3