热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Oracle中的自动增长字段简析

环境:PLSQLDeveloper7.1.5Oracle11.2.0Oracle中不像MYSQL和MSSQLServer中那样指定一个列为自动增长列的方式,不过在Oracle中可以通过SEQUENCE序列来实现自动增长字段。在Oracle中SEQUENCE被称为...Syntax

环境:PLSQL Developer 7.1.5 Oracle 11.2.0
 
Oracle 中不像MYSQL和MS SQLServer中那样指定一个列为自动增长列的方式,不过在Oracle 中可以通过SEQUENCE序列来实现自动增长字段。在Oracle 中SEQUENCE被称为序列,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
在使用SEQUENCE前需要首先定义一个SEQUENCE,定义SEQUENCE的语法如下:
[sql]
CREATE SEQUENCE sequence_name   
    www.2cto.com  
INCREMENT BY step   
  
START WITH startvalue;   
其中sequence_name为序列的名字,每个序列都必须有唯一的名字;startvalue参数值为起始数字,step参数值为步长,即每次自动增长时增加的值。一旦定义了SEQUENCE,你就可以用CURRVAL来取得SEQUENCE的当前值,也可以通过NEXTVAL来增加SEQUENCE,然后返回 新的SEQUENCE值。比如:
[sql]
sequence_name.CURRVAL   
  
sequence_name.NEXTVAL   
如果SEQUENCE不需要的话就可以将其删除:
DROP SEQUENCE sequence_name;
下面举一个使用SEQUENCE序列实现自动增长的例子。首先创建一个名称为seq_PersonId  的SEQUENCE:
[sql]
CREATE SEQUENCE seq_PersonId   
    www.2cto.com  
MINVALUE 0  
  
INCREMENT BY 1   
  
START WITH 0;   
注:如果没加这句(MINVALUE 0),可能会出现这个错误(ORA-04006: START WITH 不能小于 MINVALUE)。解决方法就是指定最小值。
然后创建T_Person表:
[sql]
CREATE TABLE T_Person   
  
(    
  
FId NUMBER (10) PRIMARY KEY,    
  
FName VARCHAR2(20),    
  
FAge NUMBER (10)   
  
);   
执行上面的SQL语句后就创建成功了T_Person表,然后执行下面的SQL语句向T_Person表中插入一些数据:
[sql]
INSERT INTO T_Person(FId,FName,FAge)   
    www.2cto.com  
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表上的触发器:
[sql]
CREATE OR REPLACE TRIGGER trigger_personIdAutoInc   
    www.2cto.com  
   BEFORE INSERT ON T_Person   
  
   FOR EACH ROW    
  
DECLARE    
  
BEGIN    
  
   SELECT seq_PersonId.NEXTVALINTO:NEW.FID FROM DUAL;   
  
END trigger_personIdAutoInc;   
这个触发器在T_Person 中插入新记录之前触发,当触发器被触发后则从seq_PersonId中取道新的序列号然后设置给FID字段。
执行下面的SQL语句向T_Person表中插入一些数据:
[sql]
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  www.2cto.com  
1  Tom  18
2  Jim  81
3  Kerry  33
4  Wow  22
5  Herry  28
7  Gavin  36
这个例子讲解完了,请删除T_Person表以及SEQUENCE:
[sql]
DROP TABLE T_Person;   
  
DROP SEQUENCE seq_PersonId;  
 
 
 
作者 Wentasy

推荐阅读
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文探讨了适用于Spring Boot应用程序的Web版SQL管理工具,这些工具不仅支持H2数据库,还能够处理MySQL和Oracle等主流数据库的表结构修改。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 在使用SQL Server进行动态SQL查询时,如果遇到LIKE语句无法正确返回预期结果的情况,通常是因为参数传递方式不当。本文将详细探讨这一问题,并提供解决方案及相关的技术背景。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文详细介绍了 MySQL 的查询处理流程,包括从客户端连接到服务器、查询缓存检查、语句解析、查询优化及执行等步骤。同时,深入探讨了 MySQL 中的乐观锁机制及其在并发控制中的应用。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 本文详细介绍了如何从 MySQL 官方网站下载并安装 MySQL 数据库,涵盖从下载到配置环境变量、初始化数据库及设置密码的完整步骤。 ... [详细]
  • 5G至4G空闲态移动TAU流程解析
    本文详细解析了用户从5G网络移动到4G网络时,在空闲态下触发的跟踪区更新(TAU)流程。通过N26接口实现无缝迁移,确保用户体验不受影响。 ... [详细]
author-avatar
北京雅舍
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有