2 表
2.1 創(chuàng)建表(同)
create table tableName(
columnName1 int,
columnName2 int
)
2.2 刪除表(異)
MySQL:
drop table if exists tableName
Oracle:
drop table tableName
注:Oracle沒有if exists關(guān)鍵字,也沒用類似if exists的SQL語法。
3 列
3.1 添加列(異)
MySQL:
A. alter table tableName add column columnName1 int;
B. alter table tableName add column columnName1 int, add column columnName2 int;
注:其中關(guān)鍵字column可有可無。
Oracle:
A. alter table tableName add columnName1 int;
B. alter table tableName add (columnName1 int);
C. alter table tableName add (columnName1 int, columnName2 int);
注:對(duì)于A,只有添加單列的時(shí)候才可使用,對(duì)于添加多列時(shí)需要使用C,不能像MySQL那樣重復(fù)使用add column關(guān)鍵字。
3.2 刪除列(異)
MySQL:
A. alter table tableName drop column columnName1
B. alter table tableName drop column columnName1, drop column columnName2
注:其中關(guān)鍵字column可有可無。
Oracle:
A. alter table tableName drop column columnName2
B. alter table tableName drop (columnName1)
C. alter table tableName drop (columnName1,columnName2)
注:對(duì)于A,只有刪除單列的時(shí)候才可使用,對(duì)于刪除多列時(shí)需要使用C,不能像MySQL那樣重復(fù)使用drop column關(guān)鍵字。
3.3 修改列名(異)
MySQL:
alter table tableName change column columnNameOld columnNameNew columnType;
Oracle:
alter table tableName rename column columnNameOld to columnNameNew;
3.4 修改列類型(說明)
Oracle中,在列有數(shù)據(jù)的時(shí)候,無法修改列類型;沒有數(shù)據(jù)時(shí)可以。
MySQL中,無論列是否有數(shù)據(jù)都可以修改列類型。
但是當(dāng)有數(shù)據(jù)是,直接修改列類型都可能對(duì)數(shù)據(jù)造成丟失等,所以一般需要結(jié)合具體的業(yè)務(wù)來對(duì)列數(shù)據(jù)做處理后,再修改列類型類型。所以修改列的類型并非使用SQL語句進(jìn)行一步到位的修改,而是通過以下流程:
A. 添加臨時(shí)列
B. 將需要更改的列的值經(jīng)過類型轉(zhuǎn)換的驗(yàn)證后,賦值給臨時(shí)列
C. 刪除原有列
D. 將臨時(shí)列的列名修改為原有列列名
4 索引
在整個(gè)數(shù)據(jù)庫內(nèi),MySQL的索引可以同名,也就是說MySQL的索引是表級(jí)別的;但是Oracle索引不可以同名,也就是說Oracle的索引是數(shù)據(jù)庫級(jí)別的。
4.1 創(chuàng)建索引(同)
create index indexName on tableName (columnName);
4.2 刪除索引(異)
MySQL:
alter table tableName drop index indexName
Oracle:
drop index indexName
4.3 查詢表的索引(異)
MySQL:
show index from tableName
Oracle:
select index_name, table_name, column_name from user_ind_columns where table_name=' tableName '
5 空字符串問題
對(duì)于使用語句:select * from table1 where user_name <> ''來查詢列user_name不為空(不為null且不為空字符)時(shí),Oracle會(huì)查不出任何結(jié)果,而MySQL可以正常運(yùn)行。這里MySQL之所以可以得到正確結(jié)果,還因?yàn)楸容^符號(hào)<>會(huì)先將列為null的內(nèi)容進(jìn)行過濾,然后再比較內(nèi)容是否為空字符串。
這就要求一方面,以后在編寫代碼的時(shí)候,盡量保證不會(huì)往數(shù)據(jù)庫插入空字符串''這樣的值,要么保持有數(shù)據(jù),要么保持為null。另外,對(duì)于MySQL中已經(jīng)同時(shí)存在Null和''時(shí),所有判斷是否為null或者''的地方改為判斷列的長度是否為0。