Oracle的SYS_GUID()函數(shù)用法及說(shuō)明
前言
今天在代碼中發(fā)現(xiàn)了Oracle的SYS_GUID() 函數(shù)作為主鍵的用法,于是來(lái)記錄下~
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、函數(shù)解釋
SYS_GUID (),是Oracle 8i 后提供的函數(shù)。
SYS_GUID產(chǎn)生并返回一個(gè)全球唯一的標(biāo)識(shí)符(原始值)由16個(gè)字節(jié)組成。
在大多數(shù)平臺(tái),生成的標(biāo)識(shí)符由主機(jī)標(biāo)符,執(zhí)行函數(shù)的進(jìn)程或者線程標(biāo)識(shí)符,和進(jìn)程或線程的一個(gè)非重復(fù)的值(字節(jié)序列)。
二、查看方式
select sys_guid() from dual;
返回:長(zhǎng)度為32位的字符串,包括0-9和大寫A-F。
但是你會(huì)發(fā)現(xiàn)此時(shí)查出的是亂碼,那該怎么辦呢?
亂碼就要使用rawtohex()函數(shù)方法啦~
select rawtohex(sys_guid()) from dual;
吶!現(xiàn)在就展示正常了。
三、使用場(chǎng)景
1.建表時(shí)作為主鍵
如下(示例):
create table student ( student_id raw(16) default sys_guid() primary key, student_name varchar2(100) not null );
2.新增數(shù)據(jù)時(shí)填充主鍵
如下(示例):
insert into student(student_id, student_name) values (SYS_GUID(), '小明');
四、SYS_GUID作為主鍵的優(yōu)缺點(diǎn)
1.優(yōu)點(diǎn)
(1)序列從起點(diǎn)開始進(jìn)行自增,但只能保持在單個(gè)實(shí)例里唯一。
因此不適合用作并行或遠(yuǎn)程環(huán)境的主鍵,因?yàn)楦髯原h(huán)境里的序列可能會(huì)生成相同的數(shù)字,從而導(dǎo)致沖突的發(fā)生。
而SYS_GUID會(huì)保證它創(chuàng)建的標(biāo)識(shí)符在每個(gè)數(shù)據(jù)庫(kù)里都是唯一的。
(2)序列必須是DML陳述式的一部分,因此它需要一個(gè)到數(shù)據(jù)庫(kù)的往返過(guò)程(否則它就不能保證其值是唯一的)。
SYS_GUID不需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)的時(shí)間戳和機(jī)器標(biāo)識(shí)符,這就節(jié)省了查詢的消耗。
2.缺點(diǎn)
(1)從空間上,相同條件下,使用SYS_GUID做主鍵比用Sequence做主鍵,表多消耗了空間。
(2)用SYS_GUID使用時(shí)相對(duì)不太方便,必須(手動(dòng))輸入或者通過(guò)腳本來(lái)填充相應(yīng)的字段。
總結(jié)
總的來(lái)說(shuō),還是利大于弊啦~
hextoraw()
:十六進(jìn)制字符串轉(zhuǎn)換為raw;rawtohex()
:將raw串轉(zhuǎn)換為十六進(jìn)制;lower()
:將大寫轉(zhuǎn)為小寫;
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Oracle RAC環(huán)境下的阻塞(blocking blocked)介紹和實(shí)例演示
這篇文章主要介紹了Oracle RAC環(huán)境下的阻塞(blocking blocked)介紹和實(shí)例演示本文提供了2個(gè)查詢腳本,并給出實(shí)例演示那些session為阻塞者,哪些為被阻塞者,需要的朋友可以參考下2014-09-09oracle 數(shù)據(jù)庫(kù)閃回相關(guān)語(yǔ)句介紹
本文將詳細(xì)介紹oracle 數(shù)據(jù)庫(kù)閃回相關(guān)語(yǔ)句,需要了解跟多的朋友可以參考下2012-11-11oracle數(shù)據(jù)庫(kù)在客戶端建立dblink語(yǔ)法
oracle服務(wù)器沒(méi)有建立目標(biāo)數(shù)據(jù)庫(kù)的TNS時(shí),在客戶端(有權(quán)限的情況下)建立dblink語(yǔ)法如下,有需求的朋友可以參考下哈2013-05-05Oracle跨數(shù)據(jù)庫(kù)查詢并插入實(shí)現(xiàn)原理及代碼
需要從一個(gè)數(shù)據(jù)庫(kù)中的表GIS_WEICHAI_DATA_1S中的數(shù)據(jù)導(dǎo)入到另個(gè)一數(shù)據(jù)庫(kù)的表GIS_WEICHAI_DATA_1S中,接下來(lái)為你講解跨數(shù)據(jù)庫(kù)查詢并插入需要的朋友可以參考下2013-03-03Oracle數(shù)據(jù)庫(kù)ORA-28040:沒(méi)有匹配的驗(yàn)證協(xié)議解決辦法
這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)ORA-28040:沒(méi)有匹配的驗(yàn)證協(xié)議問(wèn)題的解決辦法,ORA-28040是Oracle數(shù)據(jù)庫(kù)的錯(cuò)誤代碼,表示沒(méi)有匹配的驗(yàn)證協(xié)議,這通常是由于客戶端和服務(wù)器之間的身份驗(yàn)證協(xié)議不匹配導(dǎo)致的,需要的朋友可以參考下2024-03-03