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 トリガーは、
CREATE TRIGGER `capital` AFTER INSERT ON `brandnames` FOR EACH ROW UPDATE brandnames SET bname = CONCAT( UCASE( LEFT( bname, 1 ) ) , LCASE( SUBSTRING( bname, 2 ) ) )
INSERT 操作がまだアクティブである間に、ブランド名テーブルの更新を試みます。 MySQL は、データの整合性を維持し、潜在的なエラーを回避するために、これを防止します。
この問題を解決するには、次の方法の使用を検討してください:
たとえば、次のトリガーは、full_name 列の値に基づいて small_name 列を更新します。
CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames` FOR EACH ROW BEGIN SET NEW.small_name = CONCAT(UCASE(LEFT(NEW.full_name,1)) , LCASE(SUBSTRING(NEW.full_name,2))) END
以上がMySQL がストアドファンクションとトリガーでのテーブル変更をブロックするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。