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