2

ステップの auto_increment フィールドの増分を次のように変更します

上記のリンクは、mysql で AUTO_INCREMENT のステップ値を変更する方法を説明しています。これはすべてのテーブルに影響します。

この動作は mysql に固有のものですか? ステップ値をテーブルごとに設定できる DBMS を提案できますか?

4

3 に答える 3

3

技術的にAUTO_INCREMENTは、キーワードは MySQL に固有のものであるため、他の RDBMS ブランドは異なる機能を実装して人為的な一意の ID 値を生成するためです。MySQL と SQLite は、広く使用されている唯一の RDBMS で、テーブルごとのインクリメント オプションを許可していません。

マイクロソフト SQL サーバー

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

PostgreSQL には同じオプションを持つシーケンスオブジェクトがあり、テーブルが値の自動生成に使用するシーケンスを宣言できます。

CREATE SEQUENCE s START WITH 1 INCREMENT BY 10; 

CREATE TABLE employee (
    id integer NOT NULL DEFAULT NEXTVAL('s')
);

SERIALを省略表現として宣言することもできます。これにより、列のシーケンスが暗黙的に作成されます。私はそれをテストしていませんが、それが作成するシーケンスで ALTER SEQUENCE を実行して、増分ステップを変更できると思います。

IBM DB2

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

SQlite には、自動インクリメントのインクリメントをグローバルまたはテーブルごとに変更する手段がないようです。maxint に達するまで 1 ずつインクリメントし、いくつかのランダムな値を試してからあきらめます。

于 2013-02-15T15:51:25.993 に答える
0

他のデータベース システムが AUTO_INCREMENT のステップ値を変更できるかどうかを尋ねていますか? そうであれば、SQL Server でこれを行うことができます。ほとんどの RDBS がこれをサポートしていると思いますが、SQL Server でサポートされていることは知っています。

于 2013-02-15T15:27:03.513 に答える
0

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

于 2013-02-15T15:48:48.310 に答える