MySQLで新規にテーブルを作って、プライマリーキーをAUTO_INCREMENTに設定したときに調べたことをメモ。AUTO_INCREMENTを1番から採番するパターンと特定の番号の連番で採番したいパターンが出てきたので調査。
データベースはMySQLのバージョン5.6.38で試しました。select version();
のSQL文で確認。
mysql> SELECT version(); +-----------+ | version() | +-----------+ | 5.6.38 | +-----------+
テストデータを作成
とりあえずテストデータを作成します。キノコ好きなので、キノコテーブルを作成。
mysql> CREATE TABLE mashroom (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100));
出来上がったテーブルの構造を確認します。憶えついでに、テーブルの構造を確認するSQL文2種類。DESC
は、SHOW COLUMNS FROM テーブル名;
と同じようですが、コンパクトにかけるので、DESC
で。(ORDER BY の DESC と間違えそう)
mysql> DESC mashroom; +-------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(100) | YES | | NULL | | +-------+--------------+------+-----+---------+----------------+ mysql> SHOW FULL COLUMNS FROM mashroom; +-------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+ | Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | +-------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+ | id | int(11) | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | | | name | varchar(100) | utf8_general_ci | YES | | NULL | | select,insert,update,references | | +-------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
データの挿入(INSERT):ID指定をしない
作成したテーブルにデータを挿入してみます。AUTO_INCREMENTの設定フィールド「id」には値を設定せず、「name」フィールドにのみ値セット。INSERT INTO文でまとめて挿入します。
mysql> INSERT INTO mashroom (name) VALUES ("shimeji"), ("shiitake"), ("enoki");
挿入されたデータを確認します。
mysql> SELECT * FROM mashroom; +----+----------+ | id | name | +----+----------+ | 1 | shimeji | | 2 | shiitake | | 3 | enoki | +----+----------+
1番から連番でidの値が挿入されました。
データの挿入(INSERT):ID指定をする
先程のテーブルに今度は、idの値を指定して挿入してみます。連番ではない番号で挿入してみる。
INSERT INTO mashroom (id, name) VALUES (10, "maitake");
挿入されたデータの確認を。
mysql> SELECT * FROM mashroom; +----+----------+ | id | name | +----+----------+ | 1 | shimeji | | 2 | shiitake | | 3 | enoki | | 10 | maitake | +----+----------+
指定した番号で挿入されました。この状態でidの値を指定せずに挿入すると…
mysql> INSERT INTO mashroom (name) VALUES ("matustake"); mysql> SELECT * FROM mashroom; +----+-----------+ | id | name | +----+-----------+ | 1 | shimeji | | 2 | shiitake | | 3 | enoki | | 10 | maitake | | 11 | matustake | +----+-----------+
11番が採番されました。
AUTO_INCREMENTの値を確認
AUTO_INCREMENTが次に採番する番号が何番かを確認する方法。テーブルの状態を見ることができるSQL文があるので、それで確認します。
mysql> SHOW TABLE STATUS WHERE name = "mashroom";
テーブルの情報が多いので、表示は割愛しますが、その中に Auto_increment: 12
と書いてある部分があります。これが次にセットされる値になります。
AUTO_INCREMENTの値を変更する
もしAUTO_INCREMENTの値を変更する機会があればということで。テストデータとか入れたりして、終わったあとにデータと共にきれいにするときに、よく使っています。
mysql> ALTER TABLE mashroom AUTO_INCREMENT = 20;
\(^o^)/できた!
SQL文書くの好き。最近はフレームワークにお世話になるから、直接SQL文を書くことが少なくなった気がします。