您好,登錄后才能下訂單哦!
今天小編給大家分享一下Oracle實(shí)現(xiàn)主鍵字段自增的方式有哪些的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
Identity Columns新特性自增(Oracle版本≥12c)
創(chuàng)建自增序列,創(chuàng)建表時(shí),給主鍵字段默認(rèn)使用自增序列
創(chuàng)建自增序列,使用觸發(fā)器使主鍵自增
創(chuàng)建自增序列,插入語句(insert)時(shí),使用自增序列代替值
數(shù)據(jù)庫表名稱為:userinfo(不能使用user,user為Oracle關(guān)鍵字)
該種方式要求Oracle版本≥12c
在自增字段后使用以下2種語句的1種:
generated by default as IDENTITY
generated always as identity
建表語句:
CREATE TABLE userinfo ( id number(11) generated by default as IDENTITY,--使用自增功能 name varchar2(20) , age number(3) )
測試:
INSERT INTO USERINFO (name,age) VALUES('張三',18)
結(jié)果:
該種方式很簡單,底層原理其實(shí)和下面3種方式相似,只是Oracle幫我們省去了多余的操作。
以下是剩余的3種方式,都用共同的特點(diǎn)(先創(chuàng)建自增序列):
必須先創(chuàng)建自增序列:
--設(shè)置自增序列,名稱為"seq_userinfo",名字任意命名 create sequence seq_userinfo increment by 1 --每次+1 start with 1 --從1開始 nomaxvalue --不限最大值 nominvalue --不限最小值 cache 20; --設(shè)置取值緩存數(shù)為20
sequence各個(gè)參數(shù)詳解,可以參考這邊文章:
Oracle中sequence(序列)詳解
建表語句,設(shè)置自增字段默認(rèn)使用自增序列(推薦該方式):
--創(chuàng)建userinfo表 CREATE TABLE userinfo ( id number(11) DEFAULT seq_userinfo.nextval, --"seq_userinfo"為自增序列名稱 name varchar2(20) , age number(3) );
測試:我使用的是DBeaver軟件:
如圖:
注意:新增了一條數(shù)據(jù),點(diǎn)擊保存,該軟件并不會立刻自動顯示生成的ID,我們需要關(guān)閉當(dāng)前頁簽,再打開就可以看到自增的ID了
如下:
建表語句:
--創(chuàng)建userinfo表 CREATE TABLE userinfo ( id number(11) not null, name varchar2(20) , age number(3) );
創(chuàng)建觸發(fā)器(只需要注意注釋的位置):
--創(chuàng)建觸發(fā)器,名稱為"deptinfo_TRIGGER",名字任意命名 create or replace trigger userinfo_TRIGGER before insert on userinfo --"userinfo"為表名稱 for each row begin select seq_userinfo.nextval into :new.id from dual; --1、"seq_userinfo"為自增序列名稱 2、這里的id是你需要自增的序列 end userinfo_TRIGGER; --"userinfo_TRIGGER"為觸發(fā)器名稱
測試:跟方式1測試一樣,會存在不顯示ID問題:
如圖:
重新打開頁簽:
如下:
建表語句:
--創(chuàng)建userinfo表 CREATE TABLE userinfo ( id number(11) not null, name varchar2(20) , age number(3) );
在插入語句中,自增的字段(ID),使用自增序列去代替
如下:
INSERT INTO userinfo(id,name,age) VALUES(seq_userinfo.nextval,'睡竹',18);
注意:方式三與MySQL、微軟的SQL server的自增方式是一樣的!
運(yùn)行結(jié)果:
對后臺系統(tǒng)開發(fā)來說:
方式1和方式2最方便
方式3還需要新加一個(gè)觸發(fā)器,不推薦
方式4類似于方式2,但是對Java程序而言,mybatis的xml需要顯式的指定觸發(fā)器,不夠友好
附上刪除觸發(fā)器和自增序列的語句:
--刪除自增序列,"seq_userinfo"為自增序列的名稱 drop sequence seq_userinfo --刪除觸發(fā)器,"userinfo_TRIGGER"為觸發(fā)器名稱 drop trigger userinfo_TRIGGER
以上就是“Oracle實(shí)現(xiàn)主鍵字段自增的方式有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。