ステップの auto_increment フィールドの増分を次のように変更します
上記のリンクは、mysql で AUTO_INCREMENT のステップ値を変更する方法を説明しています。これはすべてのテーブルに影響します。
この動作は mysql に固有のものですか? ステップ値をテーブルごとに設定できる DBMS を提案できますか?
ステップの auto_increment フィールドの増分を次のように変更します
上記のリンクは、mysql で AUTO_INCREMENT のステップ値を変更する方法を説明しています。これはすべてのテーブルに影響します。
この動作は mysql に固有のものですか? ステップ値をテーブルごとに設定できる DBMS を提案できますか?
技術的にAUTO_INCREMENT
は、キーワードは MySQL に固有のものであるため、他の RDBMS ブランドは異なる機能を実装して人為的な一意の ID 値を生成するためです。MySQL と SQLite は、広く使用されている唯一の RDBMS で、テーブルごとのインクリメント オプションを許可していません。
SQL Server はIDENTITYオプションを使用して列を宣言し、IDENTITY キーワードは初期値と増分の引数を取ることができるため、テーブルごとにこれを変えることができます。
CREATE TABLE employee
(
id int IDENTITY(1,2),
fname varchar (20),
minit char(1),
lname varchar(30)
)
Oracle はSEQUENCEオブジェクトを使用し、NEXTVAL() を呼び出して主キーの新しい値を取得します。複数のテーブルに対して単一のシーケンスを使用することも、特定のテーブルに対して特定のシーケンスを使用することも、任意の組み合わせを使用することもできます。INSERT するたびに、シーケンスに明示的に名前を付けるだけです。
CREATE SEQUENCE s START WITH 1 INCREMENT BY 10;
INSERT INTO employee (id) VALUES (s.NEXTVAL);
PostgreSQL には同じオプションを持つシーケンスオブジェクトがあり、テーブルが値の自動生成に使用するシーケンスを宣言できます。
CREATE SEQUENCE s START WITH 1 INCREMENT BY 10;
CREATE TABLE employee (
id integer NOT NULL DEFAULT NEXTVAL('s')
);
SERIALを省略表現として宣言することもできます。これにより、列のシーケンスが暗黙的に作成されます。私はそれをテストしていませんが、それが作成するシーケンスで ALTER SEQUENCE を実行して、増分ステップを変更できると思います。
DB2 にもシーケンス オブジェクトがあります。DB2 は、ID値を自動生成する列を宣言することもできます。
CREATE TABLE EMPLOYEE (
SERIALNUMBER BIGINT NOT NULL
GENERATED ALWAYS AS IDENTITY
(START WITH 1, INCREMENT BY 1),
FIRSTNAME CHAR(64),
LASTNAME CHAR(64),
SALARY DECIMAL(10, 2),
PRIMARY KEY (SERIALNUMBER)
);
または:
CREATE SEQUENCE EMPSERIAL
AS BIGINT
START WITH 1
INCREMENT BY 10;
SQlite には、自動インクリメントのインクリメントをグローバルまたはテーブルごとに変更する手段がないようです。maxint に達するまで 1 ずつインクリメントし、いくつかのランダムな値を試してからあきらめます。
他のデータベース システムが AUTO_INCREMENT のステップ値を変更できるかどうかを尋ねていますか? そうであれば、SQL Server でこれを行うことができます。ほとんどの RDBS がこれをサポートしていると思いますが、SQL Server でサポートされていることは知っています。
SQL Server-IDENTITY
IDENTITY [ (seed , increment) ]
http://msdn.microsoft.com/en-us/library/ms186775.aspx
オラクル - シーケンス
CREATE SEQUENCE Test_Sequence
INCREMENT BY 1
START WITH 1;
INSERT INTO Test (ID, Val)
VALUES (Test_Sequence.NEXTVAL, 1);
http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_6015.htm