search
HomeDatabaseMysql TutorialOracle中序列的使用

数据库设计的三大范式第一条就是独立的表结构中必须有唯一主键来标识表中数据.在以往微软的SQL Server(duo版本)平台上.手动编码实

数据库设计的三大范式第一条就是独立的表结构中必须有唯一主键来标识表中数据.在以往微软的SQL Server(duo版本)平台上.手动编码实现表中主键.并设定为自增列是极其简单.编码如下:

1,1),

Oracle中如果要设定一个独立表结构的主键为自增.其中就涉及到了Oracle 10G中关于序列(Sequence)的使用.

(A)Sequence-序列的定义语法

代码

;

 语法定义说明:

Sequence_Name:定义序列的名称[有意义的命名].

Start With (start_num):用来定义序列的初始值.可选. 系统默认值为1.

Increment By(increment_num):指定序列每次自增的增量. 可选. 系统默认值同样为1.

MaxValue(maximum_num):设定序列自增最大上限整数值.maximum_num必须大于或等于start_num即初始值.同时maximum_num必须大于序列最小下限值minimum_num.[保证有意以].

NoMaxValue:是系统对序列设置的默认值. 即指定升序序列的最大值为10的27次方.降序序列的最大值为-1.NoMaxValue为系统默认值. 同理MinValue.

MinValue(minimum_num):设定序列自增最小下限整数值. ,minmum_num必须小于或等于start_num即初始值. 而且minimum_num必须小于maximum_num.同理.

NoMinvalue:即使序列自增下限的默认值. 升序序列的最小值为1, 降序序列最小为负的10的26次方.NoMinValue为默认值.

Cycle:指定当序列即使已经达到序列自增的最大值或最小值时也继续生成整数. 当升序序列达到最大值时. 下一个生成的值为最小值即初始值. 当降序序列达到最小值时. 下一个生成的值最大值. 以这种规则来循环.

NoCycle:正好反之:指定到序列自增到最大值或最小值时就不能再生成整数了. NoCycle是默认值.

Cache(cache_num):指定要保留在内存中整数的个数.默认缓存的格式为20个. 可以缓存的整数最少为2个. 可以缓存的整数个数最多为:Cell(maximum_num—minimum_num)/ABS(increment_num). 算法即:Cell(序列的最大上限值—最小下限值,)/ABS(每次自增的增量).

NoCache:指定不适用缓存整数数据.【个人建议不适用缓存来存储数据. 当数据库连接断开后.自动清空内存数据,导致后面插入数据序列值不连续.效果  建议在创建不适用Cache存储 后有详解】.

Order:确保按照请求次序生成整数 【不常用的设置】.只有在使用Real Application Cluster(RAC)时才可以使用Order选项设置.

Noorder:就是(以上)反之.(不在赘述) NoOrder为系统默认值.

详细了解sequence序列的详细语法定义. 定义一个简单的Sequence序列.并使用在表中主键列中实现自增.代码如下:

 1110 nocache ;

 (B)Use Sequence-使用序列

 序列生成的是一系列整数数字.一个序列中包含两个"伪列" ,,分别为"Currval"和"Nextval",可以分别用来获取该序列的当前值和下一个值.

虽然我们在定义时指定序列product_sequence初始值为1但并没有真正初始化该值. 当在检索序列的当前值前,必须通过检索序列的下一个值即Nextval来对序列进行初始化操作.在选择了product_sequence.Nextval时,该序列就被初始化为1.如下为实例.

   120 
10 ); 

上述为第一次执行后. 序列中初始化的值为定义时1. 如果在定义时没有指定初始值. 默认值为1.成功初始化后我们来获得当前序列的值.

当查询Currval时,Nextval保持不变.而nextval只有在再次查询nextval以获得下一个值是才会改变. 下面做一个实例. 注意nextval和Currval先后顺序.

 查询结果如下:

当查询两个值时Nextval在前. 前面提到再次查询Nextval可以获得序列的下一个值. 所以此处序列的当前值Currval为2.其实可以理解这样这个过程:Nextval其实通过查询来向序列赋值的,而赋值对象就是Currval.Currval同时又是对外访问序列值的唯一窗口.product_sequence.currval 就直接取到了序列的当前值.同理我们可以把product_sequence.currval放在主键赋值, 而不用手动每次定义.  是否又再一次接近我们目的.

注意我们在定义使用了Cycle选项:即当序列自增到最大值或最小值时产生循环效果. 我们来看下实例. 

 执行最后结果:

 当我们再次执行赋值语句时 结果:

 序列的值有最大上限10 又再次恢复到初始值1,实现一次循环. 如果再次执行其实同第一次执行时一样的,Cycle实现序列在一个特定范围内循环定义使用.

(C)使用序列填充主键-(核心内容)

上面做的都是准备工作, 我们要的最后结果即是在主键列中通过序列来自动赋值.当然前提表的主键定义时数据类型必须为整数. 在这里我还要再次提一下Cache这个选项.在使用序列填充主键时,常用设置为NoCache即采取默认方式. 当关闭数据库连接时所缓存的值会全部丢失. 导致主键产生的数值不连续的现象. 使用序列来填充主键标识:

 

这种方式不必每次添加数据时查看主键的数值. 害怕插入重复数据. 而主键列的赋值工作完全交给序列来做. 我只需把精力投放在其他地方.

上面操作基本实现我们当初预想. 但我也想提出一个问题:

在微软的SQL Server平台上定义独立表结构的主键时. 可以同时指定多个列共同标识为该表的主键. 即如果多个合并在一起比对实现主键唯一标识. 而Oracle 10G中序列其实就分离这种关系. 两者之间相互独立. 也就是说主键的定义和主键赋值 是没有关-系的. 完全分开的. 序列只是负责独立的对主键进行赋值. 而至于主键约束的定义 没有关系.

(D)修改和删除序列

可以通过Alert  Sequence子句来修改序列, 但是我在修改序列中常常会报错 而且很频繁.修改序列内容有如下限制:

(1)不能修改序列的初始值

(2)序列的最小值不能大于当前值

(3)序列的最大值不能小于当前值

修改序列的增量:

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
深入理解MySQL索引优化器工作原理深入理解MySQL索引优化器工作原理Nov 09, 2022 pm 02:05 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于索引优化器工作原理的相关内容,其中包括了MySQL Server的组成,MySQL优化器选择索引额原理以及SQL成本分析,最后通过 select 查询总结整个查询过程,下面一起来看一下,希望对大家有帮助。

sybase是什么数据库sybase是什么数据库Sep 22, 2021 am 11:39 AM

sybase是基于客户/服务器体系结构的数据库,是一个开放的、高性能的、可编程的数据库,可使用事件驱动的触发器、多线索化等来提高性能。

visual foxpro数据库文件是什么visual foxpro数据库文件是什么Jul 23, 2021 pm 04:53 PM

visual foxpro数据库文件是管理数据库对象的系统文件。在VFP中,用户数据是存放在“.DBF”表文件中;VFP的数据库文件(“.DBC”)中不存放用户数据,它只起将属于某一数据库的 数据库表与视图、连接、存储过程等关联起来的作用。

数据库系统的构成包括哪些数据库系统的构成包括哪些Jul 15, 2022 am 11:58 AM

数据库系统由4个部分构成:1、数据库,是指长期存储在计算机内的,有组织,可共享的数据的集合;2、硬件,是指构成计算机系统的各种物理设备,包括存储所需的外部设备;3、软件,包括操作系统、数据库管理系统及应用程序;4、人员,包括系统分析员和数据库设计人员、应用程序员(负责编写使用数据库的应用程序)、最终用户(利用接口或查询语言访问数据库)、数据库管理员(负责数据库的总体信息控制)。

microsoft sql server是什么软件microsoft sql server是什么软件Feb 28, 2023 pm 03:00 PM

microsoft sql server是Microsoft公司推出的关系型数据库管理系统,是一个全面的数据库平台,使用集成的商业智能(BI)工具提供了企业级的数据管理,具有使用方便可伸缩性好与相关软件集成程度高等优点。SQL Server数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使用户可以构建和管理用于业务的高可用和高性能的数据应用程序。

access数据库的结构层次是什么access数据库的结构层次是什么Aug 26, 2022 pm 04:45 PM

结构层次是“数据库→数据表→记录→字段”;字段构成记录,记录构成数据表,数据表构成了数据库。数据库是一个完整的数据的记录的整体,一个数据库包含0到N个表,一个表包含0到N个字段,记录是表中的行。

go语言可以写数据库么go语言可以写数据库么Jan 06, 2023 am 10:35 AM

go语言可以写数据库。Go语言和其他语言不同的地方是,Go官方没有提供数据库驱动,而是编写了开发数据库驱动的标准接口,开发者可以根据定义的接口来开发相应的数据库驱动;这样做的好处在于,只要是按照标准接口开发的代码,以后迁移数据库时,不需要做任何修改,极大方便了后期的架构调整。

mysql查询慢的因素除了索引,还有什么?mysql查询慢的因素除了索引,还有什么?Jul 19, 2022 pm 08:22 PM

mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到,而面试中,也是个高频题。遇到这种问题,我们一般也会想到是因为索引。那除开索引之外,还有哪些因素会导致数据库查询变慢呢?

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft