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

2つの自動インクリメント列または他の列の自動インクリメントと同じ値

    したがって、1つの列にauto_increment機能を使用させたいが、同じテーブル内の別の列にも同じ値を持たせたいですか?

    この機能が必要になる理由は考えられません。おそらく、あなたはあなたが達成しようとしていることを説明することができます、そして私は別の解決策を提案することができますか?

    この場合、トリガーは機能しません。これは鶏が先か卵が先かという問題です:

    • AFTERの列の値を変更することはできません 引き金。
    • ただし、BEFOREの場合、自動インクリメント値はまだ設定されていません。 トリガーが実行されます。

    また、MySQL 5.7 GENERATEDを使用しても機能しません 列:

    CREATE TABLE MyTable (
      id INT AUTO_INCREMENT PRIMARY KEY,
      why_would_you_want_this INT GENERATED ALWAYS AS (id)
    );
    
    ERROR 3109 (HY000): Generated column 'why_would_you_want_this' 
    cannot refer to auto-increment column.
    

    単一のSQLステートメントでそれを行うことはできません。 INSERTする必要があります 行を入力し、すぐにUPDATEを実行します 2番目の列を同じ値に設定します。

    CREATE TABLE MyTable (
      id INT AUTO_INCREMENT PRIMARY KEY,
      why_would_you_want_this INT
    );
    
    INSERT INTO MyTable () VALUES ();
    
    UPDATE MyTable SET why_would_you_want_this = LAST_INSERT_ID() 
    WHERE id = LAST_INSERT_ID();
    

    または、AUTO_INCREMENT以外のメカニズムを使用してID値を生成することもできます。 (たとえば、Memcachedインクリメントキー)。次に、両方の列に新しい値を挿入できます:

    INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);
    


    1. MySQL5.1からメールを送信する方法

    2. 複雑なフィルタリングを使用してランダムな行を1つ選択します

    3. MySQLで日時に挿入する場合のPHPのdate()形式

    4. VisualCOBOLをMySQLに接続する