有很多帖子表明在 Oracle 中执行自动增量主键(如 MySQL 的 auto_increment 属性)的公认方法是触发器。
但是,如果我不想要触发器怎么办?我已经找到了很多方法来解决这个问题,我想知道这些方法的优点/缺点是什么。
第一个选项
我想我知道为什么不推荐这种方法。从人类的角度来看,这是显而易见的,但从数据库的角度来看,这可能是危险的。
INSERT INTO MY_TABLE (PK, NAME, PASSWORD) VALUES
(((SELECT MAX(PK) FROM MY_TABLE)+1), :bound_name, :bound_password)
第二个选项
假设 MY_TABLE_PK 是我们事先创建的序列:
VARIABLE id NUMBER;
BEGIN
:id := MY_TABLE_PK.NEXTVAL;
INSERT INTO MY_TABLE (PK, NAME, PASSWORD) VALUES
(:id,:bound_name,:bound_value);
END;
第三个选项
再次假设 MY_TABLE_PK 是我们事先创建的序列:
INSERT INTO MY_TABLE (PK, NAME, PASSWORD)
SELECT MY_TABLE_PK.NEXTVAL, 'literal name', 'literal password'
FROM DUAL
在我的实验中,所有这些都在某些情况下有效,尽管不是 100% 的时间。