Oracle數(shù)據(jù)庫(kù)中創(chuàng)建自增主鍵的實(shí)例教程
在設(shè)計(jì)數(shù)據(jù)庫(kù)表的時(shí)候發(fā)現(xiàn)Oracle沒(méi)有自增主鍵的設(shè)置,Google了解到Oracle本身并不支持自增主鍵,需要通過(guò)序列(Sequence)和觸發(fā)器(Trigger)實(shí)現(xiàn)。
創(chuàng)建表Student
Create Table Student( id number(12) primary key, --通過(guò)序列和觸發(fā)器實(shí)現(xiàn)id的自增 name varchar2(20) , age number(3) , sex number(1) )
創(chuàng)建序列Sequence
Create Sequence SEQ_STUDENT minvalue 1 maxvalue 99999999999999999999 start with 1 --從1開(kāi)始 increment by 1 --增量為1 cache 0 order;
創(chuàng)建觸發(fā)器Trigger
Create or Replace Trigger STUDENT_AUTOINCREMENT Before Insert on Student For Each Row When (NEW.ID IS NULL) Begin Select SEQ_STUDENT.NEXTVAL INTO :NEW.ID FROM DUAL; End;
注意點(diǎn):
1:一個(gè)sequence可以被多個(gè)表共享。
2:被多個(gè)表共享的sequence生成的數(shù)字序列始終連續(xù),不會(huì)重新開(kāi)始。
3:如果不再使用的sequence請(qǐng)刪除。
SELECT * FROM DAYSBFJ.DAYS_CARD_UPDATE3 order by id asc --alter table DAYSBFJ.DAYS_CARD_UPDATE3 add source_Flag varchar2(2); --create sequence DAYS_CARD_UPDATE2_SEQ_ID minvalue 1 maxvalue 999999999 start with 1; --Update DAYSBFJ.DAYS_CARD_UPDATE2 set id = DAYS_CARD_UPDATE2_SEQ_ID.nextval; --update DAYSBFJ.DAYS_CARD_UPDATE3 set SOURCE_FLAG = '2'
另一個(gè)例子:
新建一個(gè)缺少主鍵的表
create table test1(name1 varchar2(40),city varchar2(40));
--插入數(shù)據(jù)
insert into test1 values('name1','nanjing'); insert into test1 values('name1','nanjing'); insert into test1 values('name2','nanjing1'); insert into test1 values('name3','nanjing2'); insert into test1 values('name4','nanjing3'); insert into test1 values('name5','nanjing4'); insert into test1 values('name6','nanjing5'); insert into test1 values('name7','nanjing6'); insert into test1 values('name8','nanjing7'); insert into test1 values('name9','nanjing8'); insert into test1 values('name10','nanjing9'); insert into test1 values('name10','nanjing9'); insert into test1 values('name12','nanjing11'); insert into test1 values('name13','nanjing12'); insert into test1 values('name14','nanjing13'); commit;
--增加主鍵ID
alter table TEST1 add id number(10);
--設(shè)置sequence使ID自增
create sequence SEQ_ID minvalue 1 maxvalue 999999999 start with 1;
--將id的值設(shè)置為sequence
Update test1 set id=seq_id.nextval; commit;
--設(shè)置id為主鍵
alter table TEST1 add constraint PK_TEST1 primary key (ID); select ID,Name1,CITY from TEST1;
相關(guān)文章
oralce和db2兼容開(kāi)發(fā)注意事項(xiàng)
這篇文章主要介紹了oralce和db2兼容開(kāi)發(fā)注意事項(xiàng)的相關(guān)資料,這里整理了幾個(gè)重要問(wèn)題及如何解決,需要的朋友可以參考下2016-11-11Oracle數(shù)據(jù)庫(kù)中刪除表空間的詳細(xì)步驟與示例代碼
在 Oracle 數(shù)據(jù)庫(kù)中,表空間是存儲(chǔ)數(shù)據(jù)的邏輯容器,有時(shí)候,我們可能需要?jiǎng)h除不再使用的表空間以釋放空間或進(jìn)行數(shù)據(jù)庫(kù)重組,本文將詳細(xì)介紹在 Oracle 數(shù)據(jù)庫(kù)中刪除表空間的步驟和示例代碼,需要的朋友可以參考下2024-01-01Oracle 11g實(shí)現(xiàn)安全加固的完整步驟
這篇文章主要給大家介紹了關(guān)于Oracle 11g實(shí)現(xiàn)安全加固的完整步驟,文中通過(guò)示例代碼將實(shí)現(xiàn)的步驟一步步介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Oracle 11g具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05oracle11g用戶(hù)登錄時(shí)被鎖定問(wèn)題的解決方法 (ora-28000 the account is locked)
最近在操作oracle11g的使用出現(xiàn)錯(cuò)誤的現(xiàn)象:ora-28000 the account is locked,既用戶(hù)無(wú)法登錄問(wèn)題,如何解決此問(wèn)題呢?下面小編給大家?guī)?lái)了oracle11g用戶(hù)登錄時(shí)被鎖定問(wèn)題的解決方法,感興趣的朋友一起看看吧2017-07-07oracle中to_date詳細(xì)用法示例(oracle日期格式轉(zhuǎn)換)
這篇文章主要介紹了oracle中to_date詳細(xì)用法示例,包括期和字符轉(zhuǎn)換函數(shù)用法、字符串和時(shí)間互轉(zhuǎn)、求某天是星期幾、兩個(gè)日期間的天數(shù)、月份差等用法2014-01-01解決Oracle RMAN刪除歸檔日志不釋放問(wèn)題的方法
RMAN清除方式會(huì)自動(dòng)清除磁盤(pán)上的歸檔日志文件,同時(shí)會(huì)釋放控制文件中對(duì)應(yīng)的歸檔日志的歸檔信息,但最近在使用中就遇到了一個(gè)問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于解決Oracle RMAN刪除歸檔日志不釋放問(wèn)題的方法,需要的朋友可以參考下。2017-07-07Oracle 9i 數(shù)據(jù)庫(kù)異常關(guān)閉后的啟動(dòng)
Oracle 9i 數(shù)據(jù)庫(kù)異常關(guān)閉后的啟動(dòng)...2007-03-03