sql >> データベース >  >> RDS >> Oracle

OracleでAUTO_INCREMENTを使用してIDを作成するにはどうすればよいですか?

    Oracle 11gの時点では、Oracleには「auto_increment」列や「identity」列などはありません。 。ただし、シーケンスとトリガーを使用して簡単にモデル化できます。

    テーブル定義:

    CREATE TABLE departments (
      ID           NUMBER(10)    NOT NULL,
      DESCRIPTION  VARCHAR2(50)  NOT NULL);
    
    ALTER TABLE departments ADD (
      CONSTRAINT dept_pk PRIMARY KEY (ID));
    
    CREATE SEQUENCE dept_seq START WITH 1;
    

    トリガーの定義:

    CREATE OR REPLACE TRIGGER dept_bir 
    BEFORE INSERT ON departments 
    FOR EACH ROW
    
    BEGIN
      SELECT dept_seq.NEXTVAL
      INTO   :new.id
      FROM   dual;
    END;
    /
    

    更新:

    IDENTITY 列がOracle12cで使用可能になりました:

    create table t1 (
        c1 NUMBER GENERATED by default on null as IDENTITY,
        c2 VARCHAR2(10)
        );
    

    または、開始値と増分値を指定して、ID列への挿入を防止します(GENERATED ALWAYS )(ここでも、Oracle 12c以降のみ)

    create table t1 (
        c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
        c2 VARCHAR2(10)
        );
    

    または、Oracle 12では、シーケンスをデフォルト値として使用することもできます。

    CREATE SEQUENCE dept_seq START WITH 1;
    
    CREATE TABLE departments (
      ID           NUMBER(10)    DEFAULT dept_seq.nextval NOT NULL,
      DESCRIPTION  VARCHAR2(50)  NOT NULL);
    
    ALTER TABLE departments ADD (
      CONSTRAINT dept_pk PRIMARY KEY (ID));
    


    1. SpringDockerコンテナはPostgresDockerコンテナにアクセスできません

    2. PythonによるSQLインジェクション攻撃の防止

    3. JDBCを使用してAndroidのリモートMySQLデータベースに接続できますか?

    4. MySQL外部キー