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

如题所述

第1个回答  推荐于2017-10-04
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本回答被提问者采纳
第2个回答  2011-07-29
要设置一个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

这样就可以啦!

oracle的主键要设置默认值为自动递增,怎么处理?
Oracle 不直接支持 自动递增的列。需要创建一个序列 SEQUENCE。又由于无法在列的默认值那里,设置默认值为序列。因此只能通过触发器来设置。设置好触发器以后,所有的插入语句,将忽略外部传入的 id 数据,只使用指定的序列号来产生。SQL> CREATE SEQUENCE test_sequence2 2 increment by 1 -- 每...

oracle中如何设置主键并且让其自动增长
由于oracle中是没有自动增长的的,需要自己去进行写触发器等方式去进行设置:找了一下他人写的,有两种方法可以设置主键,一种是自增长主键,另一种就是生成唯一序列。一、自增长主键我创建一个用户的信息表-- Create tablecreate table USERINFO( USERNO NUMBER not null, USERNAME NVARCHAR2(20), USE...

在oracle 怎样设置自动递增的的字段?
如果是对于已经建好的表,想增加主键约束,则类似语法:alter table test add constraint pk_id primary key(id); 其中add constraint 和 primary key是关键字,pk_id是主键名称,自定义的额,只要不重复即可。也可以自动一些,对表的插入操作,建立一个触发器,每当有数据插入时,触发器自动修改id值...

oracle 实现主键id自增
利用序列,我们能够自动为表的主键赋予递增的数值。当序列首次被查询调用时,它会返回一个预设值。在后续每次调用中,序列将按照指定的增量递增。序列还支持循环,即在达到最大值后,序列会从最小值开始递增,直至达到再次循环的条件。通过利用Oracle数据库的序列功能,我们能够实现主键自动递增,避免了手动...

oracle怎么把主键设置自动增长
第一种,通过序列以及触发器实现主键自增长。这种方式适用于直接使用JDBC连接数据库。这种方式将主键自增长的任务完全交给数据库,我们无需在代码层面上进行任何控制。第二种,通过序列以及Hibernate配置实现自增长。这种方式适用于通过Hibernate连接数据库的方式。这种方式在数据库上创建序列,通过配置在POJO类...

oracle 如何实现主键id自增,或自动生成
一、主键id自增 oracle 中不能设置自动增加,这个和其他数据库不一样,但是有 序列,这个是Oracle自己特有的东西,1、首先创建序列:create sequence seq;语法:CREATE SEQUENCE 序列名 [INCREMENT BY n] --每次加几 [START WITH n] --序列从几开始 [{MAXVALUE\/ MINVALUE n|NOMAXVALUE}] ...

MybatisPlus Oracle 设置序列触发器 实现主键自增
为确保主键自增,需要为TMMIS10表设置一个触发器,其创建语句如下:4. 测试阶段,通过插入数据来验证设置。插入数据的SQL语句如下:5. 另外,也可以直接在表中手动插入数据(这部分内容在此省略)。通过以上步骤,你便可以成功利用Oracle的序列和触发器实现主键的自动递增。下面是一个简化的实现流程图:

在Oracle 中设置自增列
首先,创建一张测试表,然后定义一个序列,每次插入数据时,将自增列的值设置为序列的下一个值。如果需要,还可以创建触发器,在插入数据时自动更新该列的值,简化操作流程。在Oracle中使用序列和触发器实现自增列有一些需要注意的点。例如,插入指定ID值时,序列会从该值的下一个开始继续递增,但需要...

oracle怎么实现id自增和设置主键啊
可以使用序列实现id自增,主键的语法为primary key。当一个序列第一次被查询调用时,它将返回一个预定值。在随后的每次查询中,序列将产生一个按指定的增量增长的值。序列可以循环,或者是连续增加的,直到指定的最大值为止。创建序列语法如下:create sequence [模式]序列名称[start with 起始数字] [...

MybatisPlus Oracle 设置序列触发器 实现主键自增
Oracle 不支持手动设置主键自增,因此需要利用序列和触发器来实现这一功能。相较于 UUID,虽然位数不足且存在重复风险,但序列和触发器能够提供更稳定且高效的数据生成方案。具体步骤如下:首先,创建表。以 TMMIS10 表为例,创建表的语句为:接下里,创建序列。为 TMMIS10 表创建序列的语句为:操作时...

相似回答