oracle的主键要设置默认值为自动递增,怎么处理?

 我来答
wangzhiqing999
推荐于2017-10-04 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3315万
展开全部
Oracle
不直接支持 自动递增的列。
需要创建一个序列 SEQUENCE。
又由于无法在列的默认值那里,设置默认值为序列。因此只能通过触发器来设置。
设置好触发器以后,所有的插入语句,将忽略外部传入的 id 数据,只使用指定的序列号来产生。

SQL> CREATE SEQUENCE test_sequence2
2 increment by 1 -- 每次递增1
3 start with 1 -- 从1开始
4 nomaxvalue -- 没有最大值
5 minvalue 1 -- 最小值=1
6 NOCYCLE; -- 不循环

Sequence created.

SQL> CREATE TABLE test_create_tab2 (
2 id INT DEFAULT test_sequence2.NEXTVAL,
3 val VARCHAR(10),
4 PRIMARY KEY (id)
5 );
id INT DEFAULT test_sequence2.NEXTVAL,
*
ERROR at line 2:
ORA-00984: column not allowed here

SQL> CREATE TABLE test_create_tab2 (
2 id INT,
3 val VARCHAR(10),
4 PRIMARY KEY (id)
5 );

Table created.

SQL> CREATE OR REPLACE TRIGGER BeforeTestCreate2Insert
2 BEFORE INSERT ON test_create_tab2
3 FOR EACH ROW
4 BEGIN
5 SELECT test_sequence2.nextval INTO :new.id FROM dual;
6 END;
7 /

Trigger created.

SQL> INSERT INTO test_create_tab2(val) VALUES ('NO id');

1 row created.

SQL> INSERT INTO test_create_tab2(id, val) VALUES (1, 'id no use');

1 row created.

SQL> SELECT * FROM test_create_tab2;

ID VAL
---------- --------------------
1 NO id
2 id no use
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhaochen885
2011-07-29
知道答主
回答量:3
采纳率:0%
帮助的人:4588
展开全部
要设置一个sequence 也就是一个序列.
先创建序列:
创建序列> create sequence seq_(序列名称)
2 start with 1 序列从1开始
3 increment by 1 每次自增1
4 maxvalue 99999999 序列值最大值
5 order 排序
6 nocycle 不循环
7 nocache; 不适用缓存

create sequence seq_序列名(这3个字替换成你想要的)
start with 1
increment by 1
maxvalue 99999999
order
nocycle
nocache;

然后你在插入数据的使用讲要用到这个序列.
比如说, 你创建了一个名为: seq_student 这样的一个虚列
插入语句: insert into student(id,name,age) values(seq_student.nextval,'小兔子',25)
这里id就用的这个序列来填充
name用的是varchar2的数据类型 所以为'小兔子'
age用的是number的数据类型 所以为25

这样就可以啦!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式