1. 程式人生 > >新手請教mysql和oracle的區別

新手請教mysql和oracle的區別

我想學學這些東西,自己電腦上裝了mysql4.1,不知道mysql的命令語句是否都能在oracle這些大型資料庫裡面用,能否用一些例如delphi之類的軟體編些程式和mysql連線上來,然後做一些基本的介面型的查詢操作。非常感謝。因為如果用命令的話,不是介面型的,所以我有這個想法,不知能否實現。


1. 自動增長的資料型別處理
MYSQL有自動增長的資料型別,插入記錄時不用操作此欄位,會自動獲得資料值。ORACLE沒有自動增長的資料型別,需要建立一個自動增長的序列號,插入記錄時要把序列號的下一個值賦於此欄位。


CREATE SEQUENCE 序列號的名稱 (最好是表名+序列號標記) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;
其中最大的值按欄位的長度來定, 如果定義的自動增長的序列號 NUMBER(6) , 最大值為999999
INSERT 語句插入這個欄位值為: 序列號的名稱.NEXTVAL


2. 單引號的處理
MYSQL裡可以用雙引號包起字串,ORACLE裡只可以用單引號包起字串。在插入和修改字串前必須做單引號的替換:把所有出現的一個單引號替換成兩個單引號。


3. 翻頁的SQL語句的處理
MYSQL處理翻頁的SQL語句比較簡單,用LIMIT 開始位置, 記錄個數;PHP裡還可以用SEEK定位到結果集的位置。ORACLE處理翻頁的SQL語句就比較繁瑣了。每個結果集只有一個ROWNUM欄位標明它的位置, 並且只能用ROWNUM<100, 不能用ROWNUM>80。
以下是經過分析後較好的兩種ORACLE翻頁SQL語句( ID是唯一關鍵字的欄位名 ):
語句一:
SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW, ID FROM TABLE_NAME WHERE 條件1 ORDER BY 條件2) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 條件3; 


語句二:
SELECT * FROM (( SELECT ROWNUM AS NUMROW, c.* from (select [FIELD_NAME,...] FROM TABLE_NAME WHERE 條件1 ORDER BY 條件2) c) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 條件3;