oracle的主键要设置默认值为自动递增,怎么处理?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle的主键要设置默认值为自动递增,怎么处理?相关的知识,希望对你有一定的参考价值。
参考技术A 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本回答被提问者采纳 参考技术B 要设置一个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
这样就可以啦!
怎么用SQL语句CREATE TABLE的主键为“自动增加”
自动递增:AUTO_INCREMENT
例子:
主键自增:CREATE TABLE test
(
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(15) NOT NULL
)AUTO_INCREMENT = 100;
上面的test表,主键id为自动递增的
[ID] [INT] IDENTITY(1,1) NOT NULL,
[其它字段] [INT] NOT NULL,
[AddTime] [DATETIME] NULL DEFAULT (GETDATE())
) ON [PRIMARY]
以上是关于oracle的主键要设置默认值为自动递增,怎么处理?的主要内容,如果未能解决你的问题,请参考以下文章