1、MySQL设置自增的方式是不适用于Oracle的,这是MySQL和Oracle之间的差异。
2、同样的差异也存在于Oracle各个版本之间,如Oracle21设置自增的方式和Oracle11之间存在着很大的差异。
查询Oracle版本。
因为Oracle之间存在存在差异,所以在设置自增前,我们应该先查询下Oracle版本。
判断当前所使用的oracle数据库的版本是多少,通过以下脚本进行查询:
SELECT
*
FROM
v$version;
然后就会查询到版本信息。
Oracle 11及以下版本:
采用 序列 + 触发器 的方式实现字段的自增。
创建序列
# RPC_SEND_SEQ 为自定义名称
CREATE SEQUENCE RPC_SEND_SEQ START WITH 1 INCREMENT BY 1;
如果不确定是否创建成功,可以通过以下查看
SELECT RPC_SEND_SEQ.NEXTVAL FROM dual;
删除序列
DROP sequence "RPC_SEND_SEQ";
展示所有 用户“USER1”所拥有的序列
SELECT *
FROM dba_sequences
WHERE SEQUENCE_OWNER='USER1';
设置触发器
触发器的名称为 RPC_SEND_AUTO_INSCREASE;
在向 SYS_RPC_SEND 表中插入数据时,会向当前记录中 id 值设置为序列的值。
具体脚本如下:
CREATE OR REPLACE TRIGGER "RPC_SEND_AUTO_INSCREASE"
BEFORE INSERT ON "SYS_RPC_SEND"
REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW WHEN (new."id" is null)
begin
select RPC_SEND_SEQ.nextval into:new."id" from dual;
end;
查看触发器的创建状态,以判断创建的触发器是否已经生效。
SELECT *
FROM user_errors
WHERE TYPE = 'TRIGGER' AND NAME = 'RPC_SEND_AUTO_INSCREASE';
删除触发器
DROP TRIGGER "RPC_SEND_AUTO_INSCREASE";
Oracle 12 以上版本:
采用 序列 + Alter设置默认值 的方式实现字段的自增。
所处的版本支持使用Alter语句设置自增,但是在那之前同样需要先创建序列。
创建序列
CREATE SEQUENCE RPC_SEND_SEQ START WITH 1 INCREMENT BY 1;
关于序列的其他操作同上。
Alter 语句设置默认值。
ALTER TABLE RPC_SEND_LOG
MODIFY (id NUMBER DEFAULT RPC_SEND_SEQ.NEXTVAL);
MySQL设置自增
通过 AUTO_INCREMENT 关键字实现。
创建表时设置自增
CREATE TABLE SYS_RPC_SEND(
id INT AUTO_INCREMENT PRIMARY KEY,
columnName VARCHAR(255)
);
修改表时设置自增
ALTER TABLE SYS_RPC_SEND
ADD COLUMN count INT(11) NOT NULL AUTO_INCREMENT AFTER columnName;