返回首頁
站長日誌
資訊中心
電子相簿
檔案下載
網站連結
即時新聞
招喚冷日
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
恭喜您是本站第 1729345 位訪客!
登入
|
註冊
主選單
首頁
站長日誌
資訊中心
電子相簿
檔案下載
網站連結
即時新聞
招喚冷日
Google 自訂搜尋
Goole 廣告
隨機相片
授權條款
本
著作
由
冷日
製作,以
創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款
釋出。
本站發文說明與規範
使用者登入
使用者名稱:
密碼:
忘了密碼?
現在就註冊!
DB研討會 :
[轉貼]Oracle 欄位自動流水號真是不人性化
討論區主頁
-
主題一覽
>
DB研討會
>
[轉貼]Oracle 欄位自動流水號真是不人性化
發表新主題
平面展開
|
最新的先
前一個主題
|
下一個主題
|
發表者
討論內容
冷日
(冷日)
發表時間:2019/7/29 13:36
Webmaster
註冊日: 2008/2/19
來自:
發表數: 15771
[轉貼]Oracle 欄位自動流水號真是不人性化
Oracle欄位自動流水號真是不人性化
幹嘛要用流水號
這個問題我之前也有思考過,最初設計用流水號是因為沒有適當欄位可以當key,因此設計一個欄位只單純區分每一個欄位,不過現在的資料庫設計時,因為正規化的設計下,其實一個table真的沒有辦法找出key或組合出key變成比較少見了,所以流水號其實只是偷懶的方式做區分而已。
MySQL的流水號
第一次使用流水號的欄位就是在MySQL資料庫的Schema設計上,由於MySQL設計基礎是簡單易用的資料庫,因此如果要一個欄位自動產生流水號真是非常的簡單,只需要再Create Table的時候補上一個關鍵字就可以搞定了。
這是官方的一個例子,只要欄位後面增加一個AUTO_INCREMENT的keyword,就表示該欄位會自動在新增一筆資料時,欄位數值+1,當然如果希望每次增加量不是1的情況也是可以補參數下去調整的。
CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) );
Oracle的流水號
很不幸的,Oracle的流水號設計就沒有這麼輕鬆了,要把整個流水號的設計分成三個階段去描述:1. 建立Table、2. 建立Sequence、3. 建立Trigger。簡而言之就是利用Trigger於新增資料的時候偷偷將自動遞增的欄位數值補上,而補上的數值則由Sequence去控管,Table本身建立的時候不提供流水號建立。
以一個範例做簡單的介紹,第一個步驟是建立TableCREATE TABLE TEST_AUTO_INCREMENT_TABLE( ID NUMBER,DAT VARCHAR2(200) );
步驟二建立Sequence是利用Oracle內建的Sequence元件來做流水號的管理,當然Sequence不僅僅是拿來做流水號使用,但是我使用上幾乎只用來做這個功能就是了(乾笑)。CREATE SEQUENCE TABLE TEST_SEQ MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE;
步驟三是關鍵,將Sequence的流水號與Table之間做關聯,主要設計方式就是,在該Table發生Insert動作之前將SEQ的值填上流水號。CREATE TRIGGER TEST_AUTO_INCREMENT_TABLE_INSERT BEFORE INSERT ON TEST_AUTO_INCREMENT_TABLE FOR EACH ROW BEGIN SELECT TABLE TEST_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL; END;
你會發現MySQL一行搞定的東西,跑到Oracle是分三段語法去整合,雖然說SEQUENCE本身不僅僅是提供流水號效果,而TRIGGER本身也是現在常用的控管方式,但是僅僅是為了流水號的功能就必須額外管理一個SEQUENCE/TRIGGER真是挺不人性化的。
原文出處:
被遺忘的瞇瞇: Oracle欄位自動流水號真是不人性化
回覆
平面展開
前一個主題
|
下一個主題
| |
|
|
討論串
»
[轉貼]Oracle 欄位自動流水號真是不人性化
(
冷日
(冷日), 2019/7/29 13:36)
[轉貼]在 Oracle 中實作自動遞增欄位 (Oracle AUTO_INCREMENT)
(
冷日
(冷日), 2019/7/29 13:39)
[轉貼]Oracle 如何做到 SQL Server 的 Identity 欄位型態
(
冷日
(冷日), 2019/7/29 13:46)
[分享]冷日的 Oracle Identity 實做
(
冷日
(冷日), 2019/7/29 13:52)
________________
系統管理區
- 臭蟲回報
- 系統公佈欄
________________
灌水測試區
- 群魔亂舞
- 聊天哈拉
________________
程設PARTY
- 網頁設計
- 爪哇咖啡屋
- 屹立不倒的C
- PHP特區
- DB研討會
- Dot Net?
- 軟工藝術
- Game Play Maker
________________
技術交流區
- 小企鵝開談
- 微軟帝國
- 一網情深
- 軟體應用
- 硬體園地
________________
忙裡偷閒
- 一車一世界
- MLEC
- 數位影像
- 生活速報
- 心情點滴
- 小說天地
- 瘋狂搞笑
- 宅字這條路
發表新主題
|
Powered by XOOPS 2.0 © 2001-2008
The XOOPS Project
|