电竞比分网-中国电竞赛事及体育赛事平台

分享

Oracle與MySQL的SQL語句區(qū)別

 森顏銘 2019-01-12

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關鍵字,也沒用類似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;

注:其中關鍵字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); 

注:對于A,只有添加單列的時候才可使用,對于添加多列時需要使用C,不能像MySQL那樣重復使用add column關鍵字。

3.2 刪除列(異)

MySQL:

A. alter table tableName drop column columnName1

B. alter table tableName drop column columnName1, drop column columnName2

注:其中關鍵字column可有可無。

 

Oracle:

A. alter table tableName drop column columnName2

B. alter table tableName drop (columnName1)

C. alter table tableName drop (columnName1,columnName2)

注:對于A,只有刪除單列的時候才可使用,對于刪除多列時需要使用C,不能像MySQL那樣重復使用drop column關鍵字。

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ù)據(jù)時可以。

MySQL中,無論列是否有數(shù)據(jù)都可以修改列類型。

但是當有數(shù)據(jù)是,直接修改列類型都可能對數(shù)據(jù)造成丟失等,所以一般需要結合具體的業(yè)務來對列數(shù)據(jù)做處理后,再修改列類型類型。所以修改列的類型并非使用SQL語句進行一步到位的修改,而是通過以下流程:

A. 添加臨時列

B. 將需要更改的列的值經過類型轉換的驗證后,賦值給臨時列

C. 刪除原有列

D. 將臨時列的列名修改為原有列列名

 

4 索引

在整個數(shù)據(jù)庫內,MySQL的索引可以同名,也就是說MySQL的索引是表級別的;但是Oracle索引不可以同名,也就是說Oracle的索引是數(shù)據(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 空字符串問題

Oracle中空字符串''就是null(也就是說,只有null,沒有空字符),而MySQL是區(qū)分null和''的。

對于使用語句:select * from table1 where user_name <> ''來查詢列user_name不為空(不為null且不為空字符)時,Oracle會查不出任何結果,而MySQL可以正常運行。這里MySQL之所以可以得到正確結果,還因為比較符號<>會先將列為null的內容進行過濾,然后再比較內容是否為空字符串。

這就要求一方面,以后在編寫代碼的時候,盡量保證不會往數(shù)據(jù)庫插入空字符串''這樣的值,要么保持有數(shù)據(jù),要么保持為null。另外,對于MySQL中已經同時存在Null和''時,所有判斷是否為null或者''的地方改為判斷列的長度是否為0。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多