Oracle SQL无需触发器能否实现列自增?创建序列是否足够?
Oracle SQL 无触发器实现列自增的方法与序列的作用
无需创建触发器,能否为列添加自增约束?
- 从Oracle 12c版本开始,支持原生的IDENTITY自增列,不用触发器也能实现列自增,甚至连序列都不用手动创建——数据库会自动维护对应的序列。示例语法:
CREATE TABLE books ( book_id NUMBER GENERATED ALWAYS AS IDENTITY START WITH 1 INCREMENT BY 1, book_name VARCHAR2(100) );
插入数据时直接忽略book_id列,数据库会自动生成自增值:
INSERT INTO books(book_name) VALUES('Oracle入门指南');
- 要是用的是Oracle 11g及更早版本,没有原生自增列功能,必须靠「触发器+序列」组合才能实现自动自增,没法只靠约束搞定。
单独创建序列是否足以实现列的自增,无需依赖触发器?
单独创建序列(比如你给的CREATE SEQUENCE books_seq START WITH 1 INCREMENT BY 1 CACHE 10;)做不到自动自增,原因很简单:
- 插入数据时必须手动调用序列的
nextval给列赋值,比如:INSERT INTO books(book_id, book_name) VALUES(books_seq.nextval, 'SQL进阶'); - 要是忘了调用
nextval,或者手动输入了其他数值,自增的连续性就会被打破,没法保证列值自动递增。 - 只有搭配触发器,才能在插入数据时自动触发序列的
nextval赋值操作,实现不用手动干预的自增效果。
内容的提问来源于stack exchange,提问作者Random
相关产品推荐
相关产品推荐

