oracle为表主键字段设置自动增长

版权所有, 律师函警告!
本文链接: https://blog.csdn.net/qq_41490274/article/details/101149989
oracle没有自动主键自动增长的功能,那我们得另辟蹊径.

假如有表:

create table product(
    pid number(8) primary key,
    pname varchar2(20) not null       
    );

我们可以使用oracle的序列来实现自动增长.

  • 在数学上,序列是被排成一列的对象(或事件);这样每个元素不是在其他元素之前,就是在其他元素之后。
  • 在oracle中,序列是一数据库对象,利用它可生成唯一的整数。一般使用序列自动地生成主码值。一个序列的值是由特殊的Oracle程序自动生成,因此序列避免了在应用层实现序列而引起的性能瓶颈。在oracle中,序列是唯一、上升、递增量为1、起始值为1、没有上限的一列对象。
-- 为表product创建一个名为produuct_seq的序列
create sequence produuct_seq;

-- 示例:
insert into product values(
       product_seq.nextval,
       '鸡你太美'
)

进阶,使用触发器让oracle自动添加主键自增长:

-- 也需要使用上面创建了的produuct_seq序列
create or replace trigger product_tri   -- 创建一个叫product_tri的触发器
before insert on product 
referencing old as old new as new -- 起别名old new  相当于 :new-->new  作用:解决与列名冲突 如果表中没有new,old列名不写这行也行
for each row -- 行触发器 一行触发一次 不写默认是表级触发器
DECLARE
begin
 select product_tri.nextval into:new.pid from dual;    -- new是新插入的数据,old是原来的数据 begin和end之间出现的new和old需要加上冒号:
end;

猜你喜欢

转载自blog.csdn.net/qq_41490274/article/details/101149989