热门标签 | 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

推荐阅读
  • 本文介绍了基于Java的在线办公工作流系统的毕业设计方案,涵盖了MyBatis框架的应用、源代码分析、调试与部署流程、数据库设计以及相关论文撰写指导。 ... [详细]
  • MyBatis入门指南:环境搭建与基础配置详解
    本文详细介绍了MyBatis的基础配置流程,包括在Maven项目中添加MyBatis依赖、IDEA中配置数据库连接、导入SQL脚本以及编写mybatis-config.xml配置文件等关键步骤。 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • 本文深入探讨了MySQL中的高级特性,包括索引机制、锁的使用及管理、以及如何利用慢查询日志优化性能。适合有一定MySQL基础的读者进一步提升技能。 ... [详细]
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • Windows环境下Oracle数据库迁移实践
    本文详细记录了一次在Windows操作系统下将Oracle数据库的控制文件、数据文件及在线日志文件迁移至外部存储的过程,旨在为后续的集群环境部署做好准备。 ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • 本文详细介绍了如何在Windows和Linux系统上配置Openfire服务器,包括安装步骤、数据库配置及端口映射等关键环节。 ... [详细]
  • 初探Hadoop:第一章概览
    本文深入探讨了《Hadoop》第一章的内容,重点介绍了Hadoop的基本概念及其如何解决大数据处理中的关键挑战。 ... [详细]
  • 本文详细介绍了如何使用Linux下的mysqlshow命令来查询MySQL数据库的相关信息,包括数据库、表以及字段的详情。通过本文的学习,读者可以掌握mysqlshow命令的基本语法及其常用选项。 ... [详细]
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • 在使用 MySQL 6.0.x 及以上版本的 JDBC 驱动时,若未正确配置 `serverTimezone` 参数,可能会导致连接异常。本文探讨了这一问题的原因及解决方法。 ... [详细]
  • 在CentOS 7中部署Nginx并配置SSL证书
    本文详细介绍了如何在CentOS 7操作系统上安装Nginx服务器,并配置SSL证书以增强网站的安全性。适合初学者和中级用户参考。 ... [详细]
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社区 版权所有