Oracle如何使用sql创建自增ID?

如题,新手,我知道要创建sequence,但是还是报错,代码如下:

create sequence seq_userid minvalue 1 maxvalue 99999999999999 start with 1 increment by 1 cache 100;

create table userinfo (
id varchar(4000) primary key default seq_userid.nextval,
username varchar(100) not null,
userpwd varchar(100) not null,
regdate date default sysdate not null);

提示“Error,ORA-00907:缺失右括号”。不知道为什么?正常应该如何创建自增id的表呢?

阅读 2.6k
1 个回答

Oracle 11g 中,可以用序列和触发器来实现自增 ID 的功能。
1.创建一个触发器。

创建序列和表。但是,你不要在 id 列中用 DEFAULT 子句:

CREATE SEQUENCE seq_userid MINVALUE 1 MAXVALUE 99999999999999 START WITH 1 INCREMENT BY 1 CACHE 100;

CREATE TABLE userinfo (
  id NUMBER(19) PRIMARY KEY,
  username VARCHAR2(100) NOT NULL,
  userpwd VARCHAR2(100) NOT NULL,
  regdate DATE DEFAULT SYSDATE NOT NULL
);

接下来再创建一个触发器:

CREATE OR REPLACE TRIGGER trg_userinfo_id
BEFORE INSERT ON userinfo
FOR EACH ROW
BEGIN
  SELECT seq_userid.NEXTVAL
  INTO :new.id
  FROM dual;
END;
/

2.Oracle 12c 和其他更高版本中可以用 IDENTITY 关键字实现:

CREATE TABLE userinfo (
  id NUMBER GENERATED ALWAYS AS IDENTITY,
  username VARCHAR2(100) NOT NULL,
  userpwd VARCHAR2(100) NOT NULL,
  regdate DATE DEFAULT SYSDATE NOT NULL
);

社区以往也问过这个问题:https://segmentfault.com/q/1010000042660385

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进