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
取消
评论