Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm cách nào để tạo id với AUTO_INCREMENT trên Oracle?

Không có cái gọi là cột "auto_increment" hoặc "danh tính" trong Oracle kể từ Oracle 11g . Tuy nhiên, bạn có thể mô hình hóa nó một cách dễ dàng bằng một chuỗi và một trình kích hoạt:

Định nghĩa bảng:

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;

Định nghĩa trình kích hoạt:

CREATE OR REPLACE TRIGGER dept_bir 
BEFORE INSERT ON departments 
FOR EACH ROW

BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;
/

CẬP NHẬT:

IDENTITY cột hiện đã có trên Oracle 12c:

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

hoặc chỉ định giá trị bắt đầu và giá trị gia tăng, đồng thời ngăn chặn bất kỳ sự chèn nào vào cột nhận dạng (GENERATED ALWAYS ) (một lần nữa, chỉ Oracle 12c +)

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

Ngoài ra, Oracle 12 cũng cho phép sử dụng một chuỗi làm giá trị mặc định:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Số nhận dạng ORA-00972 là tên cột bí danh quá dài

  2. Hàm CURRENT_TIMESTAMP () trong Oracle

  3. Làm thế nào để xuất kết quả của câu lệnh SELECT được thực thi bằng SQL động nguyên gốc?

  4. PreparedStatement và setTimestamp trong oracle jdbc

  5. Đặt lại trình tự trong oracle 11g