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为自动递增的

参考技术A create table tableName( id int identity(1,1) primary key, data varchar(50) ) /* identity(1,1)就是自动增加,第一个参数是种子值,第二个是增量值; primary key是主键*/ 参考技术B CREATE TABLE [dbo].[表名](
[ID] [INT] IDENTITY(1,1) NOT NULL,
[其它字段] [INT] NOT NULL,
[AddTime] [DATETIME] NULL DEFAULT (GETDATE())
) ON [PRIMARY]

以上是关于oracle的主键要设置默认值为自动递增,怎么处理?的主要内容,如果未能解决你的问题,请参考以下文章

怎么用SQL语句CREATE TABLE的主键为“自动增加”

每个 MySQL 表都应该有一个自动递增的主键吗?

将自动递增的主键插入 Access 表

如何在各种 .NET ORM 中使列成为自动递增的主键?

如何将自动递增的主键也用作外键?

sqlserver字段如何自动更新