并非所有 SQL 都是相同的。 Oracle 和 MySQL 都不支持 IDENTITY 的实际 SQL 标准。
Oracle 不使用反引号...您实际上不需要引用标识符。最好不要这样做,这样您就不会无意中在标识符中使用无效字符。
Oracle 数字称为 NUMBER,可以采用可选的精度和小数位数。
CREATE TABLE Category
(
id NUMBER(11) NOT NULL,
title VARCHAR2(45) NULL,
PRIMARY KEY (id)
)
要执行 AUTO_INCRMENT,请创建一个序列:
CREATE SEQUENCE seq_category_id START WITH 1 INCREMENT BY 1;
然后,当您插入表中时,执行以下操作:
INSERT INTO category
VALUES (seq_category_id.nextval, 'some title');
要自动执行此操作,如 AUTO_INCRMENT,请使用 before insert 触发器:
-- Automatically create the incremented ID for every row:
CREATE OR REPLACE trigger bi_category_id
BEFORE INSERT ON category
FOR EACH ROW
BEGIN
SELECT seq_category_id.nextval INTO :new.id FROM dual;
END;
Or:
-- Allow the user to pass in an ID to be used instead
CREATE OR REPLACE TRIGGER bi_category_id
BEFORE INSERT ON category
FOR EACH ROW
DECLARE
v_max_cur_id NUMBER;
v_current_seq NUMBER;
BEGIN
IF :new.id IS NULL THEN
SELECT seq_category_id.nextval INTO :new.id FROM dual;
ELSE
SELECT greatest(nvl(max(id),0), :new.id) INTO v_max_cur_id FROM category;
SELECT seq_category_id.nextval INTO v_current_seq FROM dual;
WHILE v_current_seq < v_max_cur_id
LOOP
SELECT seq_category_id.nextval INTO v_current_seq FROM dual;
END LOOP;
END IF;
END;
现在,就发现这些差异而言,您通常只需搜索“oracle Identity”或“oracle auto_increment”之类的内容即可了解Oracle是如何做到这一点的。