Oracle11g主键自动增长

虽然在学校的时候学过一段时间的Oracle,但是由于工作的时候一直用Ms SQL Server,导致以前学到的Oracle的东西都忘得差不多了。在Ms SQL Server中,主键的自动增长是很简单的,前些天在做一个东西,需要用到Oracle数据库,满怀憧憬的用ID做主键,想搞成自动增长的,搞了半天,发现居然增长不了,百度谷歌了半天之后发现,应该这样来实现自动增长:1、新建一个序列。2、新建表。3、在表中写个触发器。

下面举个例子来说明下:

新建序列:

CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
NOCACHE --不缓存

新建一个表:

Create Table SOUTHGIS_Users(
ID number(10) not null primary key,--主键
UserName nvarchar2(100) not null,--登录名
UserPwd varchar2(32) not null,--登录密码
TrueName nvarchar2(50),--用户姓名
Gender nvarchar2(10) ,--性别
PhoneNum nvarchar2(50),--手机号码
EmailAddress nvarchar2(200),--电子邮箱
UserDesc nvarchar2(2000)--用户描述
);

新建触发器:

--创建触发器
Create or Replace trigger SOUTHGIS_Users_Trigger
before insert on SOUTHGIS_Users
for each row
begin
if (:new.ID is null) then
select emp_sequence.nextval into :new.ID from dual;
end if;
end;
commit;

这种方法固然可以实现自动增长,可是我总感觉不是太好,主要有两点:

1、这个序列是全局的,貌似每次增长都是在前一次的基础上加1的,也就是说如果我在表1中插入的时候是1,然后在表2中插入数据的时候ID就成了2了。

2、每一个表都要创建一个触发器,表一多感觉不好管理。

不知道各位有没有更好的办法,有的话告诉小弟一声哦,勿喷...

posted @   wadeflash  阅读(1480)  评论(3编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示