其實ORACLE創(chuàng)建主鍵上面的兩種方式都可以,如何使用也看個人的選擇了,畢竟建立主鍵是針對表的操作,而不像在表中大批量的查詢數(shù)據(jù),所以性能方面的問題倒是不用過多考慮。我個人更傾向于第二種,因為第二種方式的語句更清晰,它的作用是修改表結(jié)構(gòu),添加一個約束,PK一般都主鍵的前綴,表明了這個約束是為一個列添加主鍵,同樣還可以使用FK來建立外鍵的約束或者check約束等都可通過第二條語句的方式來實現(xiàn)!~
成都創(chuàng)新互聯(lián)公司電話聯(lián)系:18980820575,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù),成都創(chuàng)新互聯(lián)公司網(wǎng)頁制作領(lǐng)域十載,包括石牌坊等多個行業(yè)擁有豐富的營銷推廣經(jīng)驗,選擇成都創(chuàng)新互聯(lián)公司,為企業(yè)保駕護航。
建表要點:
1 Gengeral 中定義表名,表空間。
2 Columns 對字段進行定義。
3 在Key選擇主鍵字段,定義主鍵名稱,一般用表名。
不能“Apply” 一般是定義不完全。
oracle:
甲骨文公司,全稱甲骨文股份有限公司(甲骨文軟件系統(tǒng)有限公司),是全球最大的企業(yè)級軟件公司,總部位于美國加利福尼亞州的紅木灘。1989年正式進入中國市場。2013年,甲骨文已超越?IBM?,成為繼?Microsoft?后全球第二大軟件公司。
2017年6月7日發(fā)布的2017年美國《財富》500強,甲骨文公司排名第81位。2017年6月,《2017年BrandZ最具價值全球品牌100強》公布,甲骨文公司排名第46位。
20世紀約70年代 一間名為Ampex的軟件公司,正為中央情報局設(shè)計一套名叫Oracle的數(shù)據(jù)庫,埃里森是程序員之一。
1977年埃里森與同事Robert Miner創(chuàng)立“軟件開發(fā)實驗室”(Software Development Labs),當時IBM發(fā)表“關(guān)系數(shù)據(jù)庫”的論文,埃里森以此造出新數(shù)據(jù)庫,名為甲骨文。
1978年 公司遷往硅谷,更名為“關(guān)系式軟件公司”(RSI)。RSI在1979年的夏季發(fā)布了可用于DEC公司的PDP-11計算機上的商用ORACLE產(chǎn)品,這個數(shù)據(jù)庫產(chǎn)品整合了比較完整的SQL實現(xiàn),其中包括子查詢、連接及其他特性。美國中央情報局想買一套這樣的軟件來滿足他們的需求,但在咨詢了IBM公司之后發(fā)現(xiàn)IBM沒有可用的商用產(chǎn)品,他們聯(lián)系了RSI。于是RSI有了第一個客戶。
最先提出“關(guān)系數(shù)據(jù)庫”的IBM采用RSI的數(shù)據(jù)庫。1982年再更名為甲骨文(Oracle)。
1.創(chuàng)建表時:
create table table_name
(
first_name varchar2(12),
second_name varchar2(10),
idcard varchar(36),
home_name varchar(66),
constraint pk_table_name primary key(first_name,second_name,idcard) -- 聯(lián)合主鍵
);
2.創(chuàng)建表之后追加聯(lián)合主鍵
alter table table_name add constraint pk_table_name primary key (first_name,second_name);
hibernate的配置文件里不是有主鍵生成策略的配置嗎?可以手動指定,也可以自動生成的。
hibernate主鍵生成機制
1) assigned
主鍵由外部程序負責生成,無需Hibernate參與。
2) hilo
通過hi/lo 算法實現(xiàn)的主鍵生成機制,需要額外的數(shù)據(jù)庫表保存主
鍵生成歷史狀態(tài)。
3) seqhilo
與hilo 類似,通過hi/lo 算法實現(xiàn)的主鍵生成機制,只是主鍵歷史
狀態(tài)保存在Sequence中,適用于支持Sequence的數(shù)據(jù)庫,如Oracle。
4) increment
主鍵按數(shù)值順序遞增。此方式的實現(xiàn)機制為在當前應(yīng)用實例中維持
一個變量,以保存著當前的最大值,之后每次需要生成主鍵的時候
將此值加1作為主鍵。
這種方式可能產(chǎn)生的問題是:如果當前有多個實例訪問同一個數(shù)據(jù)
庫,那么由于各個實例各自維護主鍵狀態(tài),不同實例可能生成同樣
的主鍵,從而造成主鍵重復異常。因此,如果同一數(shù)據(jù)庫有多個實
例訪問,此方式必須避免使用。
5) identity
采用數(shù)據(jù)庫提供的主鍵生成機制。如DB2、SQL Server、MySQL
中的主鍵生成機制。
6) sequence
采用數(shù)據(jù)庫提供的sequence 機制生成主鍵。如Oralce 中的
Sequence。
7) native
由Hibernate根據(jù)底層數(shù)據(jù)庫自行判斷采用identity、hilo、sequence
其中一種作為主鍵生成方式。
8) uuid.hex
由Hibernate基于128 位唯一值產(chǎn)生算法生成16 進制數(shù)值(編碼后
以長度32 的字符串表示)作為主鍵。
9) uuid.string
與uuid.hex 類似,只是生成的主鍵未進行編碼(長度16)。在某些
數(shù)據(jù)庫中可能出現(xiàn)問題(如PostgreSQL)。
10) foreign
使用外部表的字段作為主鍵。
一般而言,利用uuid.hex方式生成主鍵將提供最好的性能和數(shù)據(jù)庫平臺適
應(yīng)性。
1.先建一個序列:
--?Create?sequence?
create?sequence?auto_id
minvalue?1
maxvalue?9999999999999
start?with?1
increment?by?1
cache?10;
2.創(chuàng)建觸發(fā)器:
create?or?replace?trigger?auto_col_trigger
before?insert?on?auto_tab
for?each?row
declare
v_id?number?:=?0;
begin
select?auto_id.nextval?into?v_id?from?dual;
:new.id?:=?v_id;
end;
我隨便寫的,表名和字段名改一下就行了。