MySQL の AUTO_INCREMENT と PRIMARY KEY の違い
MySQL テーブルの ID を自動的に増やす
MySQL テーブルに AUTO_INCREMENT
属性を持つ id
列を追加することで、レコードを挿入するたびに自動的にID番号を割り当てることができます。これは、プライマリキーとして使用する場合に便利です。
手順
テーブルの変更
既存のテーブルに id
列を追加するには、以下の ALTER TABLE
ステートメントを使用します。
ALTER TABLE table_name ADD id INT AUTO_INCREMENT PRIMARY KEY;
データの挿入
id
列は自動的に増加するため、INSERT
ステートメントでIDを指定する必要はありません。
INSERT INTO table_name (name, age) VALUES ("John Doe", 30);
結果の確認
SELECT
ステートメントを使用して、id
列の値を確認できます。
SELECT id, name, age FROM table_name;
補足
AUTO_INCREMENT
属性は、INT
型、SMALLINT
型、TINYINT
型の列にのみ使用できます。PRIMARY KEY
制約は、テーブル内に一意の値を保証します。ALTER TABLE
ステートメントを実行する前に、テーブルにデータがないことを確認してください。
注意事項
- 上記のコードは、MySQL 5.7 以降で使用できます。
- データベースのバージョンや設定によっては、動作が異なる場合があります。
AUTO_INCREMENT
属性の開始値を設定するには、ALTER TABLE
ステートメントにAUTO_INCREMENT = start_value
オプションを追加します。
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
age INT NOT NULL
);
INSERT INTO users (name, email, age) VALUES ("John Doe", "[email protected]", 30);
INSERT INTO users (name, email, age) VALUES ("Jane Doe", "[email protected]", 25);
SELECT id, name, email, age FROM users;
出力例
+----+-------+---------+------+
| id | name | email | age |
+----+-------+---------+------+
| 1 | John Doe | [email protected] | 30 |
| 2 | Jane Doe | [email protected] | 25 |
+----+-------+---------+------+
MySQL テーブルの ID を自動的に増やす他の方法
BEFORE INSERT
トリガーを作成することで、レコード挿入前に id
列に自動的に値を割り当てることができます。
CREATE TRIGGER before_insert_users
BEFORE INSERT ON users
FOR EACH ROW
SET NEW.id = AUTO_INCREMENT(1);
シークエンスを使用する
一部の MySQL バージョンでは、SEQUENCE
オブジェクトを使用してIDを生成することができます。
CREATE SEQUENCE user_id_seq;
ALTER TABLE users
ADD id INT DEFAULT nextval('user_id_seq');
外部キーを使用する
別のテーブルのID列を外部キーとして使用することができます。
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users (id)
);
アプリケーションコードを使用して、IDを生成することができます。
import random
def generate_id():
return random.randint(1, 10000)
# ...
user = User(name="John Doe", email="[email protected]", age=30)
user.id = generate_id()
user.save()
mysql primary-key auto-increment