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