同じテーブルを更新するための MySQL トリガーの回避策
MySQL は本質的に、トリガーが割り当てられている同じテーブル内の行を更新することを制限し、再帰呼び出しを防止します。 。この制限にもかかわらず、実行可能な回避策は存在します。
推奨される回避策
トリガー内の行を直接更新する代わりに、目的のロジックを実行するストアド プロシージャを利用します。このメソッドは、行更新タスクをトリガーから分離し、制限を回避できるようにします。
例
次のシナリオを考えてみましょう:
<code class="sql">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;</code>
上記の例では、トリガー my_trigger はストアド プロシージャ insert_attribute を呼び出して、新しいレコードが Products テーブルに挿入されるときに MyTable に行を挿入し、トリガー内の直接行更新の機能を効果的に模倣します。
追加の考慮事項
この回避策は機能的な解決策として機能しますが、パフォーマンスと保守性の点で従来のトリガーとは異なることに注意することが重要です。ストアド プロシージャは、直接トリガー更新と比較して、データベース システムに追加のオーバーヘッドと複雑さをもたらす可能性があります。
以上がMySQL トリガー内で同じテーブルを更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。