sql >> データベース >  >> RDS >> Mysql

MySqlエラー:このストアド関数/トリガーを呼び出したステートメントによって既に使用されているため、ストアド関数/トリガーのテーブルを更新できません

    INSERTトリガーの起動中は、テーブルを変更できません。 INSERTは、デッドロックを引き起こす可能性のあるロックを実行する可能性があります。また、トリガーからテーブルを更新すると、同じトリガーが無限再帰ループで再度起動します。これらの理由の両方が、MySQLがこれを実行できない理由です。

    ただし、達成しようとしていることに応じて、NEW.fieldnameを使用して新しい値にアクセスできます。また、更新を実行している場合は、OLDを使用して古い値にアクセスすることもできます。

    full_brand_nameという名前の行がある場合 small_nameフィールドの短い名前として最初の2文字を使用したいとしました。 使用できるもの:

    CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames`
    FOR EACH ROW BEGIN
      SET NEW.short_name = CONCAT(UCASE(LEFT(NEW.full_name,1)) , LCASE(SUBSTRING(NEW.full_name,2)))
    END
    


    1. PostgreSQL 8.4は、すべてのテーブルに対するDML特権をロールに付与します

    2. SQLServerでサブストリングを取得する

    3. SSASの拡張イベント

    4. MySQL、MySQLi、PDOの違いは何ですか?