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

mysqlテーブルでIDを作成しますauto_increment(事後)

    たとえば、主キーはあるがAUTO_INCREMENTではないテーブルを次に示します。 :

    mysql> CREATE TABLE foo (
      id INT NOT NULL,
      PRIMARY KEY (id)
    );
    mysql> INSERT INTO foo VALUES (1), (2), (5);
    

    MODIFYできます AUTO_INCREMENTで再定義する列 オプション:

    mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
    

    これが有効になったことを確認します:

    mysql> SHOW CREATE TABLE foo;
    

    出力:

    CREATE TABLE foo (
      `id` INT(11) NOT NULL AUTO_INCREMENT,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
    

    2番目の列を作成して元の列を削除する必要なしに、列の定義を適切に変更したことに注意してください。 PRIMARY KEY 制約は影響を受けないため、ALTER TABLEに記載する必要はありません。 ステートメント。

    次に、挿入によって新しい値が生成されることをテストできます。

    mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
    mysql> SELECT * FROM foo;
    

    出力:

    +----+
    | id |
    +----+
    |  1 | 
    |  2 | 
    |  5 | 
    |  6 | 
    +----+
    4 rows in set (0.00 sec)
    

    これをMacOSXのMySQL5.0.51でテストしました。

    ENGINE=InnoDBでもテストしました および従属テーブル。 idを変更する 列定義は参照整合性を妨げません。

    コメントで言及したエラー150に対応するには、外部キー制約との競合である可能性があります。申し訳ありませんが、テストした後、うまくいくと思いました。問題の診断に役立つ可能性のあるリンクをいくつか示します。



    1. PHP:PDOクエリは結果を返しませんが、同じクエリはphpmyadminで4つの結果を返しますか?

    2. ロック待機タイムアウトが例外を超えないようにする方法。

    3. SQLServerのカーソルタイプ-ローカルカーソルとグローバルカーソルの違いは何ですか。 SQLServerチュートリアル/TSQLチュートリアル

    4. [ビデオ]AnsibleとPostgreSQL