データベースにおける自動採番IDの実現方法

データベースシステムにおいて、新規レコードがテーブルに挿入される際に一意の識別子を自動的に生成する機能は、多くのアプリケーションで不可欠です。このメカニズムは、特に主キーの管理に利用され、データの整合性を保ちながら効率的なレコード管理を可能にします。ここでは、主要なリレーショナルデータベースシステムにおける自動採番IDの設定と利用方法について具体的に解説します。

MySQLにおける自動採番

MySQLでは、AUTO_INCREMENTキーワードを使用して自動採番フィールドを定義します。このキーワードは、通常、主キーとして設定される整数型のカラムに適用されます。

以下は、Productsテーブルにproduct_idという自動採番主キーを設定する例です。

CREATE TABLE Products (
    product_id INT NOT NULL AUTO_INCREMENT,
    product_name VARCHAR(255) NOT NULL,
    price DECIMAL(10, 2),
    PRIMARY KEY (product_id)
);

デフォルトでは、AUTO_INCREMENTの開始値は1で、新しいレコードが追加されるたびに1ずつ増加します。

自動採番の開始値を変更したい場合は、ALTER TABLE文を使用します。

ALTER TABLE Products AUTO_INCREMENT = 1000;

この設定後に追加されるレコードのproduct_idは、1000から始まります。

新しいレコードを挿入する際、自動採番フィールド(product_id)の値を指定する必要はありません。データベースが自動的にユニークな値を割り当てます。

INSERT INTO Products (product_name, price)
VALUES ('Smart TV', 899.99);

上記のSQL文を実行すると、Productsテーブルに新しいレコードが追加され、product_idには自動的にユニークな値が設定されます。

SQL Serverにおける自動採番

SQL Serverでは、IDENTITYキーワードを用いて自動採番フィールドを定義します。このキーワードは、整数型のカラムに適用され、シード値(開始値)と増分値を指定できます。

以下は、Customersテーブルにcustomer_idという自動採番主キーを設定する例です。

CREATE TABLE Customers (
    customer_id INT PRIMARY KEY IDENTITY(1,1),
    customer_name NVARCHAR(255) NOT NULL,
    email NVARCHAR(255)
);

IDENTITY(1,1)は、開始値が1、増分値が1であることを示します。例えば、IDENTITY(100,10)と指定すると、最初のIDは100となり、以降110, 120と10ずつ増加します。

レコードを挿入する際には、IDENTITYフィールドの値を省略します。

INSERT INTO Customers (customer_name, email)
VALUES (N'山田 太郎', N'yamada.taro@example.com');

これにより、customer_idが自動的に採番され、新しい顧客情報がテーブルに追加されます。

Accessにおける自動採番

Microsoft Accessでは、AUTOINCREMENTキーワードまたはCOUNTERデータ型を使用して自動採番フィールドを定義します。AccessのCREATE TABLE構文において、これはフィールドの型として指定されます。

以下は、Ordersテーブルにorder_idという自動採番主キーを設定する例です。

CREATE TABLE Orders (
    order_id COUNTER PRIMARY KEY,
    order_date DATETIME,
    customer_id INT
);

または、より一般的なSQLのキーワードを使用することも可能です。

CREATE TABLE Orders (
    order_id INT PRIMARY KEY AUTOINCREMENT(1,1),
    order_date DATETIME,
    customer_id INT
);

AUTOINCREMENT(1,1)は、開始値が1、増分値が1であることを示します。AUTOINCREMENT(20,10)のように指定することで、開始値と増分値を変更できます。

レコードを挿入する際、order_idの値は自動的に生成されます。

INSERT INTO Orders (order_date, customer_id)
VALUES (#2023-11-01#, 501);

この操作により、order_idが自動で割り当てられ、新しい注文情報が記録されます。

Oracleにおける自動採番 (シーケンスの使用)

Oracle Databaseでは、自動採番機能を直接的にフィールドに割り当てるのではなく、「シーケンス(Sequence)」オブジェクトを利用します。シーケンスは、ユニークな数値の並びを生成するための独立したデータベースオブジェクトです。

まず、シーケンスを作成します。

CREATE SEQUENCE order_id_seq
    START WITH 1
    INCREMENT BY 1
    NOMAXVALUE
    NOCYCLE
    CACHE 20;

このorder_id_seqシーケンスは、1から始まり、1ずつ増加し、最大値を持たず(NOMAXVALUE)、繰り返しを行わず(NOCYCLE)、パフォーマンス向上のために20個の値をキャッシュします。

次に、テーブルを作成し、シーケンスの値を挿入時に使用します。

CREATE TABLE Items (
    item_id NUMBER PRIMARY KEY,
    item_name VARCHAR2(255) NOT NULL,
    quantity NUMBER
);

レコードを挿入する際には、シーケンスの.NEXTVALプロパティを使用して次の値を取得し、item_idカラムに割り当てます。

INSERT INTO Items (item_id, item_name, quantity)
VALUES (order_id_seq.NEXTVAL, 'Wireless Mouse', 50);

このSQL文を実行すると、order_id_seqから新しいユニークな数値が取得され、それがitem_idとしてItemsテーブルに挿入されます。

タグ: SQL MySQL SQL Server Oracle Access

9月25日 15:18 投稿