Oracle自增列
一、介绍:
在设计数据库时,有时候希望表的某一列为自增列,例如编号,本文就介绍如何在oracle数据库中实现自增列,需要两个步骤:
1)构建序列(sequence)
在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
2)构建触发器(trigger)
构建完序列后,就需要构建一个触发器,当往某一个表中插入数据时,触发器会从序列中取出一个序列号,插入到该表的自增列中
二、示例:
1、在oracle中创建一个表:USER
- create table USER
- (
- ID NUMBER(8),
- NAME VARCHAR2(32),
- AGE NUMBER(3)
- )
- ;
2、创建一个sequence:seq_user_id
- create sequence seq_user_id
- minvalue 1
- maxvalue 99999999
- start with 1
- increment by 1
- nocache
- order;
3、创建一个tirgger:trg_user_id
- CREATE OR REPLACE TRIGGER trg_user_id
- BEFORE INSERT ON USER
- FOR EACH ROW
- BEGIN
- SELECT seq_user_id.nextval INTO :new.id FROM dual;
- END;
4、测试自增列,插入一条数据
- insert into user (name,age) values ('zhang',25);
就可以看到数据库中新增了一条记录,
id | name | age |
1 | zhang | 25 |
三、备注:
按照上面的步骤,就可以实现oracle数据库的自增列。某些情况下,我们希望数据库的自增列为字符串形式,例如user表的id为varchar2类型,此时如何实现自增列
- create table USER
- (
- ID VARCHAR2(8),
- NAME VARCHAR2(32),
- AGE NUMBER(3)
- )
- ;
答案也很简单,只需要修改tirgger:trg_user_id如下:
- CREATE OR REPLACE TRIGGER trg_user_id
- BEFORE INSERT ON USER
- FOR EACH ROW
- BEGIN
- SELECT TO_CHAR(seq_user_id.nextval) INTO :new.id FROM dual;
- END;
Oracle自增列的更多相关文章
- Oracle自增列创建方法
最近在做Oracle的项目,由于以前没有接触过Oracle的开发,遇到了不少的问题,比如给Oracle表添加自增列,与SQL Server就不同. Oracle没有自增字段这样的功能,但是通过触发器( ...
- oracle 自增列设置
序列 create sequence sq_1 minvalue maxvalue start increment cache ; 触发器 create or replace trigger 触发器名 ...
- [转]oracle 实现插入自增列
本文转自:http://blog.csdn.net/love_zt_love/article/details/7911104 刚使用oracle,它和sql server 好多地方还是有所不同的,简单 ...
- oracle 实现插入自增列(类似SqlServer Identity)
oracle不像sql server 有关键字identity直接可插入数据时自增 ,Oracle是不能用Identity,可以使用Sequence Create Table Tempinfo( id ...
- oracle入坑日记<六>自增列创建和清除(含序列和触发器的基础用法)
0 前言 用过 SQLserver 和 MySQL 的自增列(auto_increment),然而 Oracle 在建表设置列时却没有自增列. 查阅资料后发现 Oracle 的自增列需要手动编写. ...
- Oracle 12c的自增列Identity Columns
在Oracle的12c版本中,Oracle实现了类似MySQL中的auto_increment的自增列,下面我们看一起Oracle是怎么实现的. Oracle Database 12c Enterpr ...
- 使用JDBC插入数据到ORACLE,使用标识列自增列
不同于SQL Server的是,Oracle中插入数据的时候,没有自增列或者是标识列,但是,我们又不想显式的进行主键的插入,这里,必须在Oracle数据库中指定一个标识列,或者说是一个序列.具体方法如 ...
- oracle 设置标识列自增
设置reg_user表 userid为自增列 1.设置键 2.创建序列 3.创建触发器
- [MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键
我们先了解下InnoDB引擎表的一些关键特征: InnoDB引擎表是基于B+树的索引组织表(IOT): 每个表都需要有一个聚集索引(clustered index): 所有的行记录都存储在B+树的叶子 ...
随机推荐
- Python语言初学总结
课程名称:程序设计方法学 实验1:程序设计语言工具 时间:2015年10月21日星期三,第3.4节 地点:理工楼1#208 一.实验目的 1.深入理解程序设计语言及其几种常见的编程范型: 2.激发学生 ...
- 理解AngularJS的作用域Scope
AngularJS中,子作用域一般都会通过JavaScript原型继承机制继承其父作用域的属性和方法.但有一个例外:在directive中使用scope: { ... },这种方式创建的作用域是一个独 ...
- 【转】个人最常用的Eclipse快捷键
记录下自己在Eclipse中最常使用的快捷键: 其实网上总结多的是,自己记录下自己平时最切身受益的一些快捷键. 1.SHIFT+ ALT+Z(刚学的): 条件:选中一段代码 会弹出上面的右键菜单, ...
- 内联样式自动出现,一般是js控制写入的
内联样式自动出现,一般是js控制写入的
- C# 使用ffmpeg.exe进行音频转换完整demo
今天在处理微信的开发接口时候,发现微信多媒体上传接口中返回的音频格式是amr.坑人的是现在大部分的web 播放器,不支持amr的格式播放.试了很多方法都不行. 没办法,只要找一个妥协的解决方案:将am ...
- RMAN备份与恢复之spfile
1.备份spfile 有关控制文件及参数文件备份的几种形式: 单独备份控制文件及参数文件 RMAN> backup current controlfile; 备份数据文件时包含控制文件 RMAN ...
- Android 检测网络连接状态
Android连接网络的时候,并不是每次都能连接到网络,因此在程序启动中需要对网络的状态进行判断,如果没有网络则提醒用户进行设置. 首先,要判断网络状态,需要有相应的权限,下面为权限代码(Androi ...
- 【linux】Cache和Buffer的区别
- 关于windows下c/c++的rand()的一个测试
,,,}; ,-,,}; ,y=; ;t<<<;t++){ ; x+=xs[d];y+=ys[d]; 在(x,y)绘制一个点; } 根据rand()%4的值决定点的移动方向,生成图像 ...
- golang的ssh例子
package main import ( "github.com/dynport/gossh" "log" ) func MakeLogger(prefix ...