扫描二维码,下载手机APP
下载安卓APP箭头

数据库的oracle数据库主键有哪些?

作者:课课家教导 http://jscebj.com点击数:948发布时间:2019-09-02 11:20:34

详解Oracle数据库主键SYS_GUID()••。SQLite 是一个被大家低估的数据库,但有些人认为它是一个不合适生产环境应用的玩具数据库••。事实上,SQLite 是一个非常可靠的数据库,它可以处理 TB 级的数据,但它没有网络层••。

接下来,本文将与大家共同探讨 SQLite 在过去一年中最新的 SQL 功效••。

在oracle8i以后供给了一个生成不重复的数据的一个函数sys_guid()一共32位,生成的根据重要是时间和机器码,具有世界唯一性,类似于java中的UUID(都是世界唯一的)••。

SYS_GUID

彩559SYS_GUID同Oracle管理员所应用的传统的序列(sequence)相比具有诸多优势••。一个序列生成器只是简略地创立从给定的起点开端的一系列整数值,而且它被用在选择陈述式的时候主动地递增该系列••。

序列生成器所生成的数字只能保证在单个实例里是唯一的,这就不合适将它用作并行或者远程环境里的重要害字,因为各自环境里的序列可能会生成雷同的数字,从而导致冲突的产生••。SYS_GUID会保证它创立的标识符在每个数据库 里都是唯一的••。

此外,序列必须是DML陈述式的一部分,因此它需要一个到数据库的往返过程(否则它就不能保证其值是唯一的)••。SYS_GUID源自不需要对数据库进行访问的时间戳和机器标识符,这就节俭了查询的耗费••。

应用

彩559SYS_GUID() 生成32位的唯一编码••。来生成唯一主键

例如:

  1. create table test 
  2. id raw(16) default sys_guid() primary key, 
  3. name varchar2(100) 
  4. ); 
  5. insert into test values(sys_guid(),'t1'); 

这样就能生成唯一的主键id了,插入数据时不用插入id列••。

SYS_GUID作为一个重要害字?

  1. create table use_seq_table(id integer ); 
  2. create sequence use_seq_sequence; 
  3. insert into use_seq_table values (use_seq_sequence_value.nextval ); 
  4.   
  5. create table use_guid_table(id raw (16)); 
  6. insert into use_guid_table(sys_guid());  

很多利用程序都依附序列生成器来创立数据行的重要害字,这些数据行没有一个明显的主值,这也就是说,在这样的数据集里一条记载的创立就会让数据列产生转变••。因此,管理员可能会对在表格中将SYS_GUID用作重要害字而不应用序列数感兴趣••。这在对象在不同机器的不同数据库里生成以及需要在后来合并到一起的情况下很有用••。

彩559但是,SYS_GUID所生成的值是一个16位的原始值••。序列所生成的整数不会应用16位(的值),除非它达到了10的30次方(每个字节有两位),而且数字是相当奇特的:

  1. SQL> select dump (123456789012345678901234567890) from dual ; 

较短的值就意味着用于表格和索引的存储空间更少,以及查询访问的时间更短••。

应用SYS_GUID或者序列会在数据库应用周期里的某些处所造成性能上的耗费,对于SYS_GUID而言,性能上的影响在查询时间和 创立时间上(在表格里要创立更多的块和索引以容纳数据)••。对序列而言,性能上的影响在查询期间,在这个时候,SGA序列的缓冲区被用光••。在缺省情况下,一 个序列一次会缓冲20个值••。如果数据库没有应用这些值就关闭了,它们就会被丧失••。

SYS_GUID生成的值的另一个明显的不足之处是,管理这些值会变得艰苦得多••。你必须(手动)输入它们或者通过脚本来填充它们,或者将它们作为web参数来传递••。

彩559出于这些原因,将SYS_GUID作为一个重要害字不是一个很好主意,除非是在一个并行的环境里或者盼望避免应用管理序列生成器的情况下••。

总结

相比于JAVA的uuid,SYS_GUID优点就是生成的字符串是唯一的,但其和UUID有同样的弊病:生成的序列过长并且没有规律不方便记忆••。SYS_GUID的利用处景是在于:当数据库某字段设置为唯一,则可用次生成(比如主键)••。

 SQLite “只是”一个库,它不是传统意义上的服务器••。因此,在某些场合下,它确实不合适••。但是,在相当多的其他场合,它却是最合适的选择••。SQLite 号称是安排和应用最广泛的数据库引擎••。我认为这很有可能,因为 SQLite 没有版权的限制••。无论何时,只要开发者想应用 SQL 在文件中存储结构化的数据,SQLite 应是首选方案••。
赞(14)
踩(0)
评论(0
最新评论

暂无评论~

大数据课程
彩世界彩票手机app 彩世界彩票开户平台 红宝石彩票彩559 秒速时时彩投注网 香港跑马注册网址 秒速时时彩规则 买彩彩票手机app 北京pk10注册平台 台湾宾果官网开奖 腾讯分分彩网上购买