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;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/180327.html