Oracle实现自增方式:序列+触发器
Oracle不能像MySQL那样设置主键自增,Oracle用 <序列+触发器>的方式使数据表的一列或多列实现自增
序列sequence+触发器trigger:实现数据表S_DEPART中的主键的自增
PL/SQL图示:

1、创建数据表,如下,DEPARTID是主键

2、创建序列Sequences
在oracle中sequence就是序列,每次取的时候它会自动增加。
sequence与表没有关系,也就是,其他表都可以引用这个sequence

INCREMENT BY -- 每次加几个
START WITH -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 20; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
CURRVAL=返回 sequence的当前值
NEXTVAL=增加sequence的值,然后返回 sequence 值(下一个sequence值)
或SQL语句
create sequence S_S_DEPART
minvalue
maxvalue
start with
increment by
nocache;
然后执行如下sql语句,在S_Depart插入一条记录,执行3次,看到DEPARTID实现了自增
insert into S_Depart(departId,Departname,Departorder)values(S_S_Depart.Nextval,'wang',);

已经引用序列sequence实现了自增,
但是,当在表中手动添加记录时,还是需要添加DEPARTID,因为建表时设置它是主键,not null
那么,怎么只输入DEPARTNAME、 DEPARTORDER,然后保存、commit,实现DEPARTID引用sequence自增呢?

这时需要用到触发器
3、创建触发器的sql语句如下:
create or replace trigger tri_test_id
before insert on S_Depart --S_Depart 是表名
for each row
declare
nextid number;
begin
IF :new.DepartId IS NULL or :new.DepartId= THEN --DepartId是列名
select S_S_DEPART.nextval --S_S_DEPART正是刚才创建的
into nextid
from sys.dual;
:new.DepartId:=nextid;
end if;
end tri_test_id;
此时,只输入DEPARTNAME、 DEPARTORDER,然后保存、commit,
DEPARTID引用sequence实现了自增
Oracle实现自增方式:序列+触发器的更多相关文章
- Oracle通过序列+触发器实现主键自增
接触oracle没多久,在建表的时候发现还不会如何设置主键自动增长.和mysql的设置为AUTO_INCREMENT属性相比,要复杂很多,所以现在记录起来. 我使用的是序列+触发器的方式. 现在已经创 ...
- oracle如何创建表的自增ID(通过触发器)
Oracle中创建表的自增ID(通过触发器),序列的自增ID和触发器的自增ID的区别 1.新增数据(序列) --创建示例表 -- create table Student( stuId ) not n ...
- Oracle列自增-12c
在ORACLE 12C以前的版本中,如果要实现列自增长,需要通过序列+触发器实现,到了12C ORACLE 引进了Identity Columns新特性,从而实现了列自增长功能. 一.Identity ...
- Oracle列自增实现(2)-Identity Columns in Oracle Database 12c Release 1 (12.1)
Oracle列自增-Identity Columns in Oracle Database 12c Release 1 (12.1) 在ORACLE 12C以前的版本中,如果要实现列自增长,需要通过序 ...
- oracle 实现 自增主键功能
转自:https://blog.csdn.net/zxh2075/article/details/78488141 之前有一项工作是将mysql的数据库实现转移到oracle,遇到了自增主键实现的问题 ...
- Oracle ID 自增
实现Oracle Id自增 1.方法一(Oracle Version Oracle 12c版本支持) create table app_student( id integer generated by ...
- oracle列自增实现(1)-Sequence+Trigger实现Oracle列自增
Sequence+Trigger实现Oracle列自增 序列的语法格式为: CREATE SEQUENCE 序列名 [INCREMENT BY n] [START WITH n] [{MAXVALUE ...
- oracle实现自增id
--oracle实现自增id --创建一张T_StudentInfo表 create table T_StudentInfo ( "id" integer not null pri ...
- oracle数据库ID自增长--序列
什么是序列?在mysql中有一个主键自动增长的id,例如:uid number primary key auto_increment;在oracle中序列就是类似于主键自动增长,两者功能是一样的,只是 ...
随机推荐
- lmdb存储的一些库相关函数
MDB_env 为一个结构体,Opaque structure for a database environment. MDB_txn :Opaque structure for a transact ...
- a链接onclick="window.location.href=在ie6上面无法执行解决
<a href="javascript:void(0)" onclick="window.location.href=document.getElementById ...
- goLang文件遍历
package main import ( "fmt" "io/ioutil" "os" "path/filepath&q ...
- proxool在web环境中的使用
proxool在web环境中的使用 简介 Proxool连接池是sourceforge下的一个开源项目,这个项目提供一个健壮.易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接 ...
- Logger日志级别说明及设置方法、说明 (zhuan)
http://blog.csdn.net/rogger_chen/article/details/50587920 ****************************************** ...
- HTML CSS 常用英语单词
head 头部 body 身体 title 标题 table表格 list 列表 i ...
- cocoapods ,错误大全
出现这种警告 Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not us ...
- unicode 和 utf-8 的关系和解释
首先一个字节就是8个晶体管同时发出的信号集, unicode就是一套编码,所有的字符都用2个字节表示,不像gbk和gb2312既保持了以前的ansi/ascii的字符单个字节编码,有发明了两个字节保存 ...
- Android Toolbar样式定制详解
前言 Marterial Design出来也有一段时间了,为了紧跟Google的设计规范,决定在项目中使用Toolbar.使用了一段时间之后,发现很多时候原始的Toolbar并不能满足项目的要求.为了 ...
- linux 重命名文件和文件夹
linux下重命名文件或文件夹的命令mv既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a目录移动到/b下,并重命名为c mv /a /b/c 其实在文本模式 ...