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

フィールドをidの値に更新するMySQLトリガー

    トリガーを使用しても、1つのステートメントでこれを行う方法がわかりません。

    @Luckyが提案したトリガーソリューションは、MySQLでは次のようになります。

    CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable
    FOR EACH ROW BEGIN
      SET NEW.group_id = COALESCE(NEW.group_id, NEW.id);
    END
    

    ただし、問題があります。 BEFORE INSERT フェーズ、自動生成されたid 値はまだ生成されていません。したがって、group_id nullの場合、デフォルトはNEW.idです。 これは常に0です。

    ただし、AFTER INSERT中にこのトリガーを起動するように変更すると、 フェーズなので、生成されたNEW.idの値にアクセスできます。 、列の値を変更することはできません。

    MySQLはDEFAULTの式をサポートしていません したがって、テーブル定義でもこの動作を宣言することはできません。 *更新:MySQL8.0.13はDEFAULT (<expression>)をサポートします ただし、式は自動インクリメント値に依存できません(これは文書化 )。

    唯一の解決策は、INSERTを実行することです 、そしてすぐにUPDATEを実行します group_idを変更するには 設定されていない場合。

    INSERT INTO MyTable (group_id, value) VALUES (NULL, 'a');
    UPDATE MyTable SET group_id = COALESCE(group_id, id) WHERE id = LAST_INSERT_ID();
    


    1. Fluent NHibernateおよびPostgreSQL、SchemaMetadataUpdater.QuoteTableAndColumns-System.NotSupportedException:指定されたメソッドはサポートされていません

    2. Ubuntu20.04にPostgreSQLをインストールします

    3. データセキュリティガバナンス

    4. Python、PyQt、SQLiteでコンタクトブックを作成する