Oracle实现主键字段自增的四种方式
在Oracle数据库中,实现主键字段自增常常有以下四种方式:序列+触发器、identity列、自增主键值、主键字段值的最大值。
序列+触发器方式
- 首先在Oracle中建立一个序列
CREATE SEQUENCE seq_test INCREMENT BY 1 START WITH 1 MAXVALUE 9999999 MINVALUE 1 CACHE 20;
- 接着定义一个带有触发器的表,实现主键字段自增
CREATE TABLE test
(
id NUMBER PRIMARY KEY,
name VARCHAR2(50)
);
CREATE OR REPLACE TRIGGER tri_test
BEFORE INSERT ON test
FOR EACH ROW
BEGIN
SELECT seq_test.NEXTVAL INTO :new.id FROM dual;
END;
- 插入数据,触发自增主键字段的自增效果
INSERT INTO test (name) VALUES ('test1');
INSERT INTO test (name) VALUES ('test2');
identity列方式
在Oracle 12c及以上版本中,可以使用identity列实现主键字段自增。
CREATE TABLE test
(
id NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1) PRIMARY KEY,
name VARCHAR2(50)
);
这种方式下,系统会自动为每个新记录插入一个唯一的、自增的主键字段值,无需写触发器。
自增主键值方式
在Oracle 11g及以下版本中,也可以使用自增主键值实现主键字段自增。
首先创建一个带有自增列的表:
CREATE TABLE test
(
id NUMBER PRIMARY KEY,
name VARCHAR2(50)
);
接着创建一个序列:
CREATE SEQUENCE seq_test INCREMENT BY 1 START WITH 1 MAXVALUE 9999999 MINVALUE 1 CACHE 20;
然后为id列创建默认值:
ALTER TABLE test MODIFY id DEFAULT seq_test.NEXTVAL;
这样,在插入一条新数据时,id字段就会自动增加。
主键字段值的最大值方式
这种方法主要适用于少量数据的情况下,直接在插入记录时设置主键字段的值为当前表中该字段值的最大值+1 。
示例:
CREATE TABLE test
(
id NUMBER PRIMARY KEY,
name VARCHAR2(50)
);
-- 获取id字段的当前最大值,如果表为空,则为0
SELECT NVL(MAX(id), 0) INTO :max_id FROM test;
-- 插入一条新记录,主键字段id设置为当前最大值+1
INSERT INTO test (id, name) VALUES (:max_id+1, 'test1');
注意,在多线程环境下,这种方式可能会出现主键冲突的情况,因此建议在实际应用中慎用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Oracle实现主键字段自增的四种方式 - Python技术站