ホームページ  >  記事  >  データベース  >  MySQL トリガー内で同じテーブルを更新するにはどうすればよいですか?

MySQL トリガー内で同じテーブルを更新するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-01 16:58:021016ブラウズ

How can I update the same table within a MySQL trigger?

同じテーブルを更新するための 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。