Oracle中的自动增长字段

Oracle 中不像MYSQL 和MSSQLServer 中那样指定一个列为自动增长列的方式,不过在Oracle中可以通过SEQUENCE序列来实现自动增长字段。

在Oracle中SEQUENCE 被称为序列,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。

在使用SEQUENCE前需要首先定义一个SEQUENCE,定义SEQUENCE的语法如下:
CREATE SEQUENCE sequence_name INCREMENT BY step STARTWITH startvalue;
        其中sequence_name为序列的名字,每个序列都必须有唯一的名字;startvalue参数值为起始数字,step参数值为步长,即每次自动增长时增加的值。一旦定义了SEQUENCE,你就可以用CURRVAL来取得SEQUENCE的当前值,也可以通过NEXTVAL来增加SEQUENCE,然后返回新的SEQUENCE值。比如:
sequence_name.CURRVAL

sequence_name.NEXTVAL
        如果SEQUENCE 不需要的话就可以将其删除:
DROP SEQUENCE sequence_name;

下面举一个使用SEQUENCE 序列实现自动增长的例子。

首先创建一个名称为seq_PersonId 的 SEQUENCE:
CREATE SEQUENCE seq_PersonId INCREMENT BY 1 START WITH 1;
        然后创建T_Person表:
CREATE TABLE T_Person(FId NUMBER (10) PRIMARY KEY,FName VARCHAR2(20),FAge NUMBER (10));
        执行上面的SQL 语句后就创建成功了T_Person 表,然后执行下面的SQL 语句向T_Person表中插入一些数据:
INSERT INTO T_Person(FId,FName,FAge)VALUES(seq_PersonId.NEXTVAL,'Tom',18);

INSERT INTO T_Person(FId,FName,FAge)VALUES(seq_PersonId.NEXTVAL,'Jim',81);

INSERT INTO T_Person(FId,FName,FAge)VALUES(seq_PersonId.NEXTVAL,'Kerry',33);
        注意这里的INSERT语句没有为FId字段设定任何值,因为DBMS会自动为FId字段设定值。执行完毕后查看T_Person表中的内容:
FID FNAME FAGE

1 Tom 18

2 Jim 81

3 Kerry 33
        使用SEQUENCE实现自动增长字段的缺点是每次向表中插入记录的时候都要显式的到SEQUENCE中取得新的字段值,如果忘记了就会造成错误。为了解决这个问题,我们可以使用触发器来解决,创建一个T_Person表上的触发器:
CREATE OR REPLACE TRIGGER trigger_personIdAutoInc

BEFORE INSERT ON T_Person

FOR EACH ROW

DECLARE

BEGIN

SELECT seq_PersonId.NEXTVAL INTO:NEW.FID FROM DUAL;

END trigger_personIdAutoInc;

这个触发器在T_Person 中插入新记录之前触发,当触发器被触发后则从seq_PersonId中取道新的序列号然后设置给FID字段。

执行下面的SQL语句向T_Person表中插入一些数据:
INSERT INTO T_Person(FName,FAge)VALUES('Wow',22);

INSERT INTO T_Person(FName,FAge)VALUES('Herry',28);

INSERT INTO T_Person(FName,FAge)VALUES('Gavin',36);
        注意在这个SQL 语句中无需再为FId 字段赋值。执行完毕后查看T_Person 表中的内容:
FID FNAME FAGE

1 Tom 18

2 Jim 81

3 Kerry 33

4 Wow 22

5 Herry 28

7 Gavin 36
        这个例子讲解完了,请删除T_Person表以及SEQUENCE:
DROP TABLE T_Person;

DROP SEQUENCE seq_PersonId;

Oracle中的自动增长字段的更多相关文章

  1. 在oracle中创建自动增长字段

    参考http://www.cnblogs.com/jerrmy/archive/2013/03/13/2958352.html http://www.jb51.net/article/43382.ht ...

  2. oracle中的自动增长

    create table test( id int not null primary key, name varchar2(20), sex int) ; create sequence t -> ...

  3. Guid算法与标识列(自动增长字段)在表中的应用

    <<1>>int(bigint)+标识列(自动增长字段) 用标识列实现字段自增可以避免并发等问题.不需开发人员自己控制自增,用标识列的字段在Insert的时候不用指定主键的值. ...

  4. [转载]C#中使用ADO.NET连接SQL Server数据库,自动增长字段用作主键,处理事务时的基本方法

    问题描述: 假设在数据库中存在以下两张数据表: User表,存放用户的基本信息,基本结构如下所示:   类型 说明 ID_User int 自动增长字段,用作该表的主键 UserName varcha ...

  5. Mysql,SqlServer,Oracle主键自动增长的设置

    1.把主键定义为自动增长标识符类型 MySql 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: )); insert into customers ...

  6. oracle 主键自动增长

    oracle 主键自动增长 2009-12-11 16:07:00|  分类: 数据库资料|字号 订阅     这几天搞Oracle,想让表的主键实现自动增长,查网络实现如下: create tabl ...

  7. Mysql,SqlServer,Oracle主键自动增长的设置

    在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: CREATE TABLE google(id INT AUTO_INCREMENT PRIMARY ...

  8. 触发器_实现ORACEL自动增长字段

    实现XX表的字段code,为自动增长字段? 1.创建一个sequence,如图: 输入如下数据: S_COUNTRY为sequence名称 2.创建一个触发器,目的是在插入数据之前插入自动增长的数字, ...

  9. sql service重置自动增长字段数字的方法

    1.--SQL表重置自增长字段(不删除表的数据) DBCC CHECKIDENT('表名', RESEED, 起始数) 2.--删除表数据的同时,重置自动增长字段 truncate table 表名

随机推荐

  1. 第1章 ZigBee协议栈初始化网络启动流程

    作者:宋老师,华清远见嵌入式学院讲师. ZigBee的基本流程:由协调器的组网(创建PAN ID),终端设备和路由设备发现网络以及加入网络. 基本流程:main()->osal_init_sys ...

  2. js获取屏幕大小

    1.js获取屏幕大小 <html> <script> function a(){ document.write( "屏幕分辨率为:"+screen.widt ...

  3. OSG-OSGEarth

    OSG-OSGEarth 初次使用Cmake——以OsgEarth工程创建为例 转:http://www.cnblogs.com/Realh/archive/2012/02/08/2342507.ht ...

  4. 使用C#实现FTP的文件上传和下载【转】

    参考博文:http://blog.163.com/mity_rui@126/blog/static/1098136182013101525615577/  

  5. (转)如何将数据库从SQL Server迁移到MySQL

    一.迁移Database Schema. 首 先使用Sybase Powerdesigner的逆向工程功能,逆向出SQL Server数据库的物理模型.具体操作是在Powerdesigner中选择“F ...

  6. php链接数据库

      1:找到 ySQL服务器 $conn = mysql_connect("localhost","","") or die("链 ...

  7. 处理海量数据的高级排序之——归并排序(C++)

    代码实现                                                                                                 ...

  8. TestStand与LabVIEW UI 交互

    交互起因 客户觉得TestStand界面复杂,希望一个简单的界面即可进行序列执行,采用LabVIEW调用TestStand引擎可实现快速设计,将TestStand拆解到LabVIEW.然而,这样做需要 ...

  9. centos下安装php后连接不上mysql

    安装完php后需要安装php的扩展比如: 安装php的扩展yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xm ...

  10. JS读写cookie以及中文乱码解决

    本文地址:http://www.cnblogs.com/PiaoMiaoGongZi/p/4092489.html 转载请注明. Js获取所有的cookie信息: var cookiename = d ...