Oracle数据库为主键设置自增(oracle11和oralce21版本之间的差异)

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值