Identity Column on Oracle

โดยปกติการสร้าง Auto Increment บน Oracle จะต้องสร้าง Sequence เพื่อใช้ในการ Generate Number ที่เป็น Unique Key ซึ่งสามารถใช้เป็น Primary Key ได้ แต่บน Oracle Database 12c ขึ้นไป เราสามารถระบุ Column ที่เราต้องสร้าง Auto Increment ด้วย Identity ได้เลย


Restriction

  • สามารถกำหนด Identity Column ได้ One Column ต่อ Table
  • จะต้องกำหนด Data Type ของ Identity Column เป็น Numeric เสมอ
  • ไม่สามารถแก้ไข Identity Column ด้วยการ Alter ได้
  • การสร้าง CREATE TABLE จากการ AS SELECT จะไม่สามารถ Inherit ข้อมูลจาก Identity Column ได้ ให้ทำการ CREATE TABLE ก่อน แล้วใช้ INSERT INTO แทน

Get Started

  • ทำการ Create Table ด้วย Generate Always
SQL> CREATE TABLE ADMIN (
  ADMIN_ID NUMBER GENERATED ALWAYS AS IDENTITY,
  ADMIN_NAME VARCHAR2(20) NOT NULL
);
  • ลองทำการ Insert Data คำเตือนจะไม่สามารถ Assign ค่าใน ADMIN_ID ได้ เนื่องจากจะถูก Generate โดยอัตโนมัติทุกครั้ง รวมถึงค่า NULL ก็ไม่สามารถ Assign ได้
SQL> INSERT INTO ADMIN (ADMIN_NAME)
  VALUES ('Administrator');
  • ทำการ Create Table ด้วย Generate by Default
SQL> CREATE TABLE ADMIN (
  ADMIN_ID NUMBER GENERATED BY DEFAULT AS IDENTITY,
  ADMIN_NAME VARCHAR2(20) NOT NULL
);
  • ลองทำการ Insert Data อีกครั้งหนึ่ง คำเตือนจะสามารถ Assign ค่าใน ADMIN_ID ได้ กรณีที่ไม่ได้กำหนดก็จะถูก Generate โดยอัตโนมัติ แต่ไม่สามารถ Assign ค่า NULL ได้
SQL> INSERT INTO ADMIN (ADMIN_ID, ADMIN_NAME)
  VALUES (2, 'DBA');
  • ทำการ Create Table ด้วย Generate by Default on NULL
SQL> CREATE TABLE ADMIN (
  ADMIN_ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
  ADMIN_NAME VARCHAR2(20) NOT NULL
);
  • ลองทำการ Insert Data อีกครั้งหนึ่ง คำเตือนจะสามารถ Assign ค่าใน ADMIN_ID ได้ กรณีที่ไม่ได้กำหนดก็จะถูก Generate โดยอัตโนมัติ แต่สามารถ Assign ค่า NULL ได้
SQL> INSERT INTO ADMIN (ADMIN_ID, ADMIN_NAME)
  VALUES (NULL, 'Administrator');

อ่านเพิ่มเติม : https://bit.ly/2PIIwsT, https://bit.ly/2wSvUZx, https://bit.ly/381HKgS


Leave a Reply

Your email address will not be published. Required fields are marked *