什么是主键自增?
在数据库设计中,主键是唯一标识一个记录的字段。自增主键指的是主键自动增长。即每插入一条记录,主键的值都会自动加1。主键自增可以保证在插入记录时,主键的唯一性,并且不需要手动指定主键的值,减少了编程的工作量。
在Oracle中实现主键自增的方法
1. 使用SEQUENCE序列
SEQUENCE序列是一个独立的对象,可以用来生成唯一的数字序列。在使用SEQUENCE序列之前,需要先创建一个SEQUENCE序列对象,然后将其与主键列建立联系。
--创建SEQUENCE序列对象
CREATE SEQUENCE seq_emp_id
START WITH 1
INCREMENT BY 1
NOMAXVALUE;
以上代码创建了一个名为seq_emp_id的SEQUENCE序列,初始值为1,每次递增1,最大值为NOMAXVALUE。
接下来需要将SEQUENCE序列与主键列建立联系:
--创建表
CREATE TABLE employee (
emp_id NUMBER(10) NOT NULL,
emp_name VARCHAR2(50) NOT NULL,
emp_address VARCHAR2(500) NULL,
CONSTRAINT pk_employee PRIMARY KEY (emp_id)
);
--联系SEQUENCE序列
CREATE OR REPLACE TRIGGER tr_employee_id
BEFORE INSERT ON employee
FOR EACH ROW
BEGIN
SELECT seq_emp_id.NEXTVAL INTO :new.emp_id FROM DUAL;
END;
/
以上代码创建了一个名为tr_employee_id的触发器,在每次插入employee表的时候,自动为emp_id主键列生成一个唯一的值。
2. 使用IDENTITY列
IDENTITY列是从Oracle 12c版本开始支持的特性,它可以自动为每个行生成唯一的数字值。
--创建表
CREATE TABLE employee (
emp_id NUMBER GENERATED ALWAYS AS IDENTITY,
emp_name VARCHAR2(50) NOT NULL,
emp_address VARCHAR2(500) NULL,
CONSTRAINT pk_employee PRIMARY KEY (emp_id)
);
在以上代码中,使用GENERATED ALWAYS AS IDENTITY来定义自增列emp_id,并将其作为主键列。在每次插入employee表的时候,emp_id都会自动递增。
小结
在Oracle中实现主键自增的方法有多种,其中最常用的方法是使用SEQUENCE序列,也可以使用IDENTITY列。在设计数据库表结构时,选择哪种方法取决于具体的需求和场景。