ホームページ > データベース > mysql チュートリアル > MySQL ストアドファンクションまたはトリガー内のテーブルを更新できないのはなぜですか?

MySQL ストアドファンクションまたはトリガー内のテーブルを更新できないのはなぜですか?

Barbara Streisand
リリース: 2024-12-07 11:30:13
オリジナル
789 人が閲覧しました

Why Can't I Update a Table Inside a MySQL Stored Function or Trigger?

MySQL エラー: ストアド ファンクション/トリガー内での更新は禁止されています

MySQL ストアド ファンクションまたはトリガー内のテーブルを更新しようとすると、エラーが発生しました:

Error: Can't update table 'brandnames' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
ログイン後にコピー

エラー

このエラーは、INSERT トリガーの実行中にテーブルを変更することを禁止する MySQL の制限に起因します。このような変更を行うと、デッドロックや無限再帰ループが発生する可能性があります。

エラーの回避

このエラーを回避するには、次のアプローチを検討してください。

  • 新しいものと古いものを使用するフィールド:

    • NEW.fieldname 構文を使用してトリガー内の新しい値にアクセスします。
    • OLD.fieldname 構文を使用してトリガー内の古い値にアクセスします ( UPDATE).
  • トリガー コンテキストを変更します:

    • トリガー タイプを AFTER INSERT から BEFORE INSERT に変更します。
    • テーブル変更コードをストアド関数の外に移動する、またはtrigger.

BEFORE INSERT トリガーの使用例:

full_brand_name フィールドがあり、次の内容を含む short_name フィールドを作成する必要があるとします。最初の 2 文字は大文字:

CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames`
FOR EACH ROW BEGIN
  SET NEW.short_name = CONCAT(UCASE(LEFT(NEW.full_brand_name,1)) , LCASE(SUBSTRING(NEW.full_brand_name,2)))
END
ログイン後にコピー

以上がMySQL ストアドファンクションまたはトリガー内のテーブルを更新できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート