Oracle數(shù)據(jù)庫中創(chuàng)建自增主鍵的實(shí)例教程
在設(shè)計(jì)數(shù)據(jù)庫表的時(shí)候發(fā)現(xiàn)Oracle沒有自增主鍵的設(shè)置,Google了解到Oracle本身并不支持自增主鍵,需要通過序列(Sequence)和觸發(fā)器(Trigger)實(shí)現(xiàn)。
創(chuàng)建表Student
Create Table Student( id number(12) primary key, --通過序列和觸發(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開始 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ì)重新開始。
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)文章
Oracle數(shù)據(jù)庫中刪除表空間的詳細(xì)步驟與示例代碼
在 Oracle 數(shù)據(jù)庫中,表空間是存儲(chǔ)數(shù)據(jù)的邏輯容器,有時(shí)候,我們可能需要?jiǎng)h除不再使用的表空間以釋放空間或進(jìn)行數(shù)據(jù)庫重組,本文將詳細(xì)介紹在 Oracle 數(shù)據(jù)庫中刪除表空間的步驟和示例代碼,需要的朋友可以參考下2024-01-01Oracle 11g實(shí)現(xiàn)安全加固的完整步驟
這篇文章主要給大家介紹了關(guān)于Oracle 11g實(shí)現(xiàn)安全加固的完整步驟,文中通過示例代碼將實(shí)現(xiàn)的步驟一步步介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Oracle 11g具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05oracle11g用戶登錄時(shí)被鎖定問題的解決方法 (ora-28000 the account is locked)
最近在操作oracle11g的使用出現(xiàn)錯(cuò)誤的現(xiàn)象:ora-28000 the account is locked,既用戶無法登錄問題,如何解決此問題呢?下面小編給大家?guī)砹薿racle11g用戶登錄時(shí)被鎖定問題的解決方法,感興趣的朋友一起看看吧2017-07-07oracle中to_date詳細(xì)用法示例(oracle日期格式轉(zhuǎn)換)
這篇文章主要介紹了oracle中to_date詳細(xì)用法示例,包括期和字符轉(zhuǎn)換函數(shù)用法、字符串和時(shí)間互轉(zhuǎn)、求某天是星期幾、兩個(gè)日期間的天數(shù)、月份差等用法2014-01-01Oracle 9i 數(shù)據(jù)庫異常關(guān)閉后的啟動(dòng)
Oracle 9i 數(shù)據(jù)庫異常關(guān)閉后的啟動(dòng)...2007-03-03