`

oracle 主键产生方法

 
阅读更多

涉及到信息系统,构建的数据模型中必定涉及主键,如何产生主键呢?

(1)不可取:获取字段的最大值加1。设计主键字段为number类型的,每次录入取得的最大值作为新记录的标示。

改良方法(可取):在数据库中构建序列,然后插入数据时候执行序列即可。如:

Create Sequence SequenceNum --建序列
Increment By 1 --增加为1
Start With 1 --开始为1
Maxvalue 99999999 --最大

录入时候可以采取:insert into a(x)values(SequenceNum.nextval),这样就不会重复了。

同理:上面序列可以采取其他方法写,这个只是最大值加1的方法。

这样不可取的原因是:如果同时多人使用系统,所有人同时获得了目前主键id的最大值为2,那么同时录入的id将为3,那么会导致冲突问题。

(2)不可取:利用rowid作为主键。

不可取原因:因为rowid是伪列,是记录的实际存储空间的标示,如果将数据进行迁移等rowid会发生变化,那么与之关联的其他表中对应数据准确性无法保证。

(3)最好不用:sys_guid()系统给的函数。

最好不用的原因:SYS_GUID会保证它创建的标识符在每个数据库里都是唯一的。对于SYS_GUID而言,性能上的影响在查询时间和创建时间上(在表格里要创建更多的块和索引以容纳数据)SYS_GUID生成的值的另一个显著的不足之处是,管理这些值会变得困难得多。你必须(手动)输入它们或者通过脚本来填充它们,或者将它们作为Web参数来传递。出于这些原因,将SYS_GUID作为一个主关键字不是一个很好主意,除非是在一个并行的环境里或者希望避免使用管理序列生成器的情况下。

(4)可取:dbms_random方法。

select dbms_random.string('a',10) from dual,采用10位的字符来表示,这样重复几率很低。

insert into a(x) values('dbms_random.string('a',10)')

(5)自己写产生随机数的函数,这个方法最好,但是选择好合适的算法显得尤为重要。

分享到:
评论

相关推荐

    ORACLE自增主键设置方法

    ### ORACLE自增主键设置方法 在Oracle数据库中,自增主键是一种常见的主键设计方式,它能够确保每条记录的唯一性,并且在插入新记录时自动递增,简化了数据管理流程。本文将详细介绍如何在Oracle中设置自增主键。 ...

    创建oracle数据库中表的主键和自增

    ### 创建Oracle数据库中表的主键和自增 在Oracle数据库中实现自增主键是一项常见但非常重要的功能。这不仅有助于确保数据的唯一性,还能简化开发过程中的某些环节,尤其是在需要自动增长的主键时。下面将详细介绍...

    sql主键产生器

    "SQL主键产生器"就是这样一个工具,它能帮助我们在创建或更新表时自动为主键字段生成唯一值。 SQL主键产生器通常有以下几种实现方式: 1. **序列(Sequences)**:在某些数据库系统如Oracle中,可以创建序列对象来...

    Oracle数据库创建表tuser设置主键自动增长

    ### Oracle数据库创建表tuser设置主键自动增长 在Oracle数据库中,创建一张包含自动增长主键的表是一项常见的需求。本文将详细介绍如何在Oracle环境中创建一个名为`tuser`的表,并实现其主键自动增长的功能。此外,...

    Oracle数据库表序列ID自增生成器

    Oracle数据库在设计和管理大型数据系统时扮演着关键角色,其中序列(Sequence)是一种非常重要的对象,用于生成唯一的整数序列,通常用作表的主键。本篇将深入探讨Oracle数据库表序列ID自增生成器及其相关知识点。 ...

    Oracle数据库中主键的智能生成.pdf

    序列的创建和使用可以确保在并发环境中也能产生不重复的值,这对于主键的生成非常关键。创建序列的SQL语句大致如下: ```sql CREATE SEQUENCE seq_name START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE ...

    oracle练习题

    此外,还可能涉及主键、外键、唯一约束等概念。 4. 事务处理:Oracle支持ACID(原子性、一致性、隔离性和持久性)属性,确保数据的完整性和一致性。练习题可能围绕COMMIT、ROLLBACK和SAVEPOINT命令进行,以理解如何...

    Oracle经典教程1——走进Oracle

    本章重点介绍了SQL语言的基本概念和Oracle数据库中的数据操作方法。通过学习本章内容,读者能够掌握如何使用SQL语句来进行基本的数据定义、数据操纵和查询操作。 ### 子查询和常用函数 #### 子查询 子查询是在另...

    Hibernate中主键生成策略

    不适用于多线程或多服务器环境,因为可能产生主键冲突。使用`<generator class="increment">`或`@GeneratedValue(strategy = GenerationType.INCREMENT)`。 8. **Assigned策略**: 主键值由应用程序手动设置,...

    超详细Oracle教程

    这次收购对Oracle公司产生了深远的影响。Sun公司拥有的Sun Microsystems技术在提高数据库性能方面具有显著优势,特别是在大型数据库系统中。Oracle与Sun的结合加强了Oracle在云计算领域的竞争力。Oracle软件与Java...

    主键和外键.doc

    - 主键应当是对用户没有意义的,以避免用户对其产生误解。 - 主键应该是单列的,以提高连接和筛选操作的效率。 - 永远不要更新主键,除非在数据转换或多数据库合并时进行数据整理。 - 主键不应包含动态变化的...

    Oracle优化器介绍

    RBO 优化器会根据规则选择执行计划,但这种方法有其局限性,不能够根据实际情况进行调整。 基于成本的优化器(CBO) CBO 是一种基于成本的优化器,根据可用的访问路径、对象的统计信息、嵌入的 Hints 来选择一个...

    超详细Oracle教程.pdf

    - **数据字典与Oracle数据类型**:数据字典提供了数据库元数据的查询方法,而Oracle数据类型则涵盖了各种数值、字符、日期等类型的定义。 - **Oracle体系结构**:深入探讨Oracle数据库的体系结构,包括内存结构、...

    oracle 不用新建序列 重置序列(从1开始增长)

    在Oracle数据库管理中,序列是一种常用的对象,用于自动产生唯一的数值。序列通常被用来作为主键或唯一标识符,特别是在自动生成记录ID时。然而,有时候我们可能需要重置序列,使其从特定值开始,例如从1开始增长,...

    Oracle 11g学习资料大全pdf版本

    建立主键可以通过 `CREATE TABLE` 时指定 `PRIMARY KEY`、使用 `ALTER TABLE ADD CONSTRAINT`、创建独立的索引等方法。 **4.4 完整性约束的习题讲解** 通过实践题目加深对各种完整性约束的理解和应用。 **4.5 给...

    Hibernate主键生成方式

    - **定义**:由 Hibernate 基于 128 位唯一值产生算法生成 16 进制数值(编码后以长度 32 的字符串表示)作为主键。 - **应用场景**:适合需要跨平台且具有高度唯一性的场景。由于其生成的主键是全局唯一的,因此...

    Oracle官方文档CHM合集-Oracle9i错误代码

    1. **数据完整性**:如违反主键、唯一键或外键约束,这可能导致"ORA-00001"或"ORA-02290"等错误。 2. **网络问题**:如连接失败或超时,可能报出"ORA-12154"或"ORA-12541"等。 3. **SQL语法错误**:执行不正确的SQL...

    Oracle数据库经典学习教程

    ### Oracle数据库经典学习教程知识点概览 ...通过以上概览可以看出,《Oracle数据库经典学习教程》涵盖了Oracle数据库的各个方面,从基础知识到高级应用,旨在帮助读者全面掌握Oracle数据库的使用技巧和管理方法。

    Oracle试题及答案

    - **日志缓冲区(Log Buffer)**:SGA的一个组成部分,用于存储事务处理过程中产生的重做日志信息。 - **数据缓冲区(Data Buffer Cache)**:SGA的重要部分,用于缓存数据库的数据块,提高数据读取效率。 - **共享池...

Global site tag (gtag.js) - Google Analytics