這篇文章將為大家詳細講解有關Oracle創(chuàng)建自增長主鍵的方法,文章內容質量較高,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
10年積累的成都網(wǎng)站建設、做網(wǎng)站經驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站策劃后付款的網(wǎng)站建設流程,更有南陽免費網(wǎng)站建設讓你可以放心的選擇與我們合作。
Oracle創(chuàng)建自增長的步驟:
創(chuàng)建自增長序列
-- 創(chuàng)建自增長序列 create sequence seq_on_chance_contract increment by 1 -- 每次加1 start with 1 -- 從1開始計數(shù) nomaxvalue -- 不設置最大值 nocycle -- 一直累加 nocache;
創(chuàng)建數(shù)據(jù)表
主鍵可以使用INTEGER和NUMBER,若系統(tǒng)使用Hibernate作為ORM框架則不推薦使用NUMBER
create table TBL_CHANCE_CONTRACT ( ID INTEGER PRIMARY KEY, CHANCE_SUCCESS_ID VARCHAR2(50) not null, CONTENT CLOB, CREATE_USER_ID VARCHAR2(50), CREATA_USER_NAME VARCHAR2(80), CREATE_DATE TIMESTAMP(6) )
創(chuàng)建主鍵觸發(fā)器,以便新增記錄的時候不需要管理ID主鍵
-- 創(chuàng)建主鍵觸發(fā)器 CREATE OR REPLACE TRIGGER tg_on_id_chance_contract BEFORE INSERT ON TBL_CHANCE_CONTRACT FOR EACH ROW WHEN (new.ID is null) BEGIN SELECT seq_on_chance_contract.nextval into:new.ID from dual; END;
一些小技巧:
查看所有的序列、表
-- 查找所有SEQUENCE、TABLE select * from user_objects ubs; -- 查找所有SEQUENCE select * from user_objects ubs where ubs.OBJECT_TYPE='SEQUENCE';
查看當前序列到了多少
select seq_on_chance_contract.nextval from dual; select seq_on_chance_contract.currval from dual;
重置序列
一般重置序列是需要刪除序列然后重建,但是這樣比較麻煩,在不刪除序列的情況下有以下2中方式:
1、利用步長參數(shù),先查出sequence的nextval,記住,把遞增改為負的這個值(反過來走),然后再改回來。
假設需要修改的序列名seq_on_chance_contract
-- 重置序列 select seq_on_chance_contract.nextval from dual; -- 假設得到結果 n alter sequence seq_on_chance_contract increment by -2; -- 注意是 -(n-1) select seq_on_chance_contract.nextval from dual; -- 再查一遍,走一下,重置為1了 alter sequence seq_on_chance_contract increment by 1; -- 還原
2、利用存儲過程實現(xiàn) (v_seqname)
create or replace procedure seq_reset(v_seqname varchar2) as n number(10); tsql varchar2(100); begin execute immediate 'select '||v_seqname||'.nextval from dual' into n; n:=-(n-1); tsql:='alter sequence '||v_seqname||' increment by '|| n; execute immediate tsql; execute immediate 'select '||v_seqname||'.nextval from dual' into n; tsql:='alter sequence '||v_seqname||' increment by 1'; execute immediate tsql; end seq_reset;
然后調用存儲過程:
exec seq_reset('v_seqname');
主鍵(primary key)是表中的一個或多個字段,它的值用于唯一地標識表中的某一條記錄。 Oracle主鍵常用的分為UUID和自增長int兩種,下面簡單說下各自的優(yōu)缺點。
UUID的優(yōu)點
1、生成方便,不管是通過sys_guid() 還是java的uuid都能很方便的創(chuàng)建UUID。
2、適合批量數(shù)據(jù)中的插入和更新操作。
3、跨服務器數(shù)據(jù)合并非常方便。
INT自增長的優(yōu)點
1、占用空間小
2、性能好,UUID跟int比起來不在一個級別上
3、容易記憶
他們各自的優(yōu)點就是彼此的缺點
適用范圍:
一般在分布式環(huán)境中使用UUID作為唯一主鍵,至于其他項目本人強烈建議使用int作為主鍵。
PS:最近我的一個分布式項目在周末訪問高峰期也是會出現(xiàn)UUID重復的情況,所以UUID號稱的全球唯一ID這個優(yōu)點我沒寫上去,而我們可以使用Zookeeper作為主鍵生成器創(chuàng)建int類型的唯一主鍵,這是完全沒有問題的。
所以綜上我還是建議所有的主鍵都應該使用int類型,在千萬級別的數(shù)據(jù)量上int類型的優(yōu)點尤為明顯。
以上就是Oracle創(chuàng)建自增長主鍵的方法,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊,感謝各位的閱讀。
分享標題:Oracle創(chuàng)建自增長主鍵的方法
本文URL:http://muchs.cn/article20/igecjo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供ChatGPT、標簽優(yōu)化、品牌網(wǎng)站建設、小程序開發(fā)、網(wǎng)站建設、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)