MySQL和Oracle的區別


語言的分類:                                                                                                                  

MySQL中語言的分類:數據定義語言(DDL):drop,create,alter等語句

                   數據操作語言(DML):insert,update,delete

                   數據查詢語言(DQL):select等語句

                   數據控制語言(DCL):grant,revoke,commit,rollback等語句

Oracl中的語言的分類:數據定義語言(DDL):drop,create,alter等語句

                     數據操作語言(DML):insert,delete,update,select ... for update等語句

                     數據查詢語言(DQL):基本查詢語句,及order by子句,grop by 子句

                     數據控制語言(DCL):grant,revoke

                     事務控制語言(TCL):commit,savepoint,rollback

登陸不同:                                                                                                                    

            MySQL是以庫的形式,每次操作是創建數據庫:create datebase 數據庫名

            Oracle是以用戶的形式,每次操作是創建用戶:create user 用戶名

            並且Oracle中用select * from dba_user來查詢所有用戶

            而MySQL中用show database 來顯示所有的數據庫信息

創建數據庫                                                                                                                   
在MySQL:create table 表名(

         列名 數據類型 [列級別約束 ] [默認值],

         ...

         列名  數據類型[列級別的約束][默認值],

         [表級別的約束 ]);

注意:像主鍵或者外鍵的設置等都是屬於表級別的約束

      像列的值不能大於到少這就屬於是列級別的約束,表級別約束可以寫在這,執行也不會出錯,但有些設置不成功,類似外鍵的設置

     例子:create table cource(sno int reference student(sno) )--這種是設置不成功的

      應該這樣設置:在所有列定義完之后使用,constraint 約束名 foreign key 字段名 reference 表名(字段名)

           但主鍵是可以設置成功的。

在Oracle中:create table 表名(

           列名 數據類型,

           ...

           列名 數據類型);--oracle中是不區分標記屬性和列級屬性的

自動增長                                                                                                                     

在MySQL中使用auto_increment自動增長序列默認從1開始,步長為1使用auto_increment=10可以改變自動增長的初始值

在orcle中使用創建序列的方式來實現

 修改字段                                                                                                                    

在兩者均使用中modify來修該字段的屬性:alter table 表名 modify 字段名  數據類型

在MySQL中修改字段名是:alter table  表名 change 舊字段名  新字段名 新數據類型

在orcle中修改字段是:alter table 表名 rename column 舊字段名 to 新字段名

添加字段                                                                                                                    

在MySQL中添加字段是:alter table 表名 add 新字段名  數據類型 

                    [約束條件]  [first|after  已存在的字段]

  --其中first或者after 已存在的字段是表示可以再指定的位置添加字段

同時在MySQL中還可以通過 alter table 表名 modify  字段1 數據類型 first|after 字段2

在oracle中添加字段是:alter table 表名 add 新字段 數據類型 [約束條件]

刪除字段                                                                                                                    

在MySQL中刪除字段是:alter table 表名 Drop 字段名

在orcle中刪除字段是:alter table 表名 drop column 字段名

刪除表的外鍵約束                                                                                                            

在MySQL中:alter table  表名 drop foreign key 外鍵約束名

在orcle中:alter table 表名 drop constraint 外鍵約束名  

注意:如果沒有沒有給外鍵約束命名那就通過查找系統的user_constraints表找到系統給其的默認外鍵約束名然后刪除

刪除表                                                                                                                      

在MySQL中:drop table [if exists] 表名     --若是沒有關聯的一些表,表名可以一次性寫上中間用','隔開

在Oracle中:drop table 表名

數據類型                                                                                                                    

整數類型:

在MySQL中:

類型名稱 說明 存儲要求
tinyint 很小的整數 1個字節
smalint 小整數 2個字節
mediuint 中等大小的整數 3個字節
int 普通大小的整數 4個字節
bigint 大整數 8個字節

 

 

 

 

 

 在orcle中只有整數類型

字符串類型:

在MySQL中:

類型名稱 說明 存儲要求
char(m) 固定長度二進制 m個字節
varchar(m) 變長的二進制 L+1個字節在此L<=M
tinytext 非常小的二進制 L+1個字節在此L<2^8
text 小的二進制字符串 L+2個字節在此L<2^16
mediutext 中等的二進制字符串

L+3個字節在此L<2^24

longtext 大的二進制 L+4個字節在此L<2^32
enum 枚舉類型只能有一個枚舉字符串 1或者2個字節取決於枚舉的數目
set 一個設置,字符串對象可以有多個或者零個set成員 1,2,3,4或者8個字節,取決於集合成員的數量

 

 

 

 

 

 

 

 

 

 

在orcle中有:char  varchr2 nchar nvarchar2

運算符                                                                                                                      

算術運算符:

在MySQL中有:=  -  *  /   %     其中在oracle中是沒有%求余的,在orcle中求余用的是mod()函數

注意在MySQL中可以直接使用=或者:=復制而在oracle中只能使用:=來賦值

比較運算符:

在MySQL中有:>   <  >=  <=  !=  <>  <=> in    between.. and     is null is not null   greatest      least    like   regexp

在orcle中是沒有<=>安全等於運算符,安全等於運算符是用來判斷null值的,當兩個操作數均為null是返回是1,當只有一個是null是返回值為0而不為null

邏輯運算符:

在MySQL中有:not(!)     and(&&)    or(||)      xor

在orcle中and是不可以用&&來代替的,or是不可以用||來代替因為在orcle中||表示字符串拼接符,另外在orcle中沒有xor邏輯異或的

位操作運算符

在MySQL中有:位與(&) 位或(|)  位非(~) 位異或(^) 左移(<<) 右移(>>) 六種

補充:在MySQL中的比較運算符中regexp的使用:

regexp在使用時常用一下幾種通配符:'^'表示以該字符后面字符開頭的的字符串例如:select * from student where sname regexp '^劉'

                                 '$'表示以該字符后面字符結尾的字符串例如:select * from student where sanme regexp '$劉'

                                 '.'匹配任一一個單字符select * from student where sname regexp '劉.玲'--匹配名字中包含劉和玲

                                                                                                    且中間只有一個字符的記錄

                                 '[...]'匹配方框內的任何字符例如[abc] [0-9] [a-z]

                                 '*'匹配零個或者多個在它前面的字符而'.*'匹配任何數量的任何字符

                                 '[^字符集合]'匹配不在指定字符結合的

在MySQL中正則的使用:                                                                                                        

select * from student where name regexp '[a]+'   --匹配出現字母a多次

                                        '[:digit:]{2}'  --匹配兩個數字連在一起

                                        '[:alpha:]{3}'  --匹配3個字母連在一起

                                        '[:space:]{3}'  --匹配3個空格

                                        '[:lower:]{3}'  --匹配3個小寫字母與一起

                                        '[:alnum:]{3}'  --匹配3個字母一起

表中數據的查詢                                                                                                              

(1)在MySQL中:使用group by 進行分組之后可以再后面再加上with rollup用來統計數量

           例如:select scode,count(*) from student group by scode with rollup;返回結果如下:

                                                                                           

但是在orcle中是不可以用with rollup的

(2)分頁查詢:

在MySQL中可以使用:select * from student limit 2,3;   --表示從第三行開始長度為三即2表示過2,3表示長度

注意:同時使用limit和order by 時limit必須為於后面

在orcle中使用rownum才可以實現分頁查詢:select * from(

                                             select rownum m,empno,ename job from emp

                                                      where rownum<7

                                                     )where m>3;

向表中插入數據                                                                                                                

在MySQL中:與orcle最大的不同是MySQL中可以一下插入多行數據,insert into 表名 values(值1),(值2)...(值n);

其它兩種方法和orcle中一樣。(通過查詢出已知表的數據插入和通過創建一個表后從已知表中插入)

刪除表中的數據                                                                                                                

在MySQL中:delete from 表名  [where 條件]

在orcle中刪除可以有from也可以沒有from

存儲過程的創建及使用:                                                                                                        

在MySQL中:

創建存儲過程為: 

delimiter //  --注意delimiter和//之間有空格,這句話的作用將MySQL的結束符設置成'//',為了避免與默認的sal語句結束符';'相沖突,

  create procedure 存儲過程名字([參數  參數的數據類型])--注意不要忘了'()',參數列表可以沒有參數類型有三種in|out|inout

    declare 變量名 變量的數據類型   [默認值]  --用來定義變量

      begin

         sql代碼塊;

      end //--之間有空格,這是存儲過程的結束

delimiter; --恢復MySQL中默認的結束符';',當然delimiter也可以指定其他符號做結束符

注意:在MySQL中變量的使用是:set 變量名=相應的變量的值;  --這種方法在orcle中是不可以使用的

                     或者通過select...into 的方法賦值

例子:delimiter //

        create procedure my()

         begin

           select * from students;

         end //

      delimter;

存儲過程的調用:                                                                                                            

在MySQL中:call 存儲過程名([參數列表])

在orcle中:exec 存儲過程名([參數列表])

       或者是:begin

                 存儲過程名();

               end;

流程控制                                                                                                                    

在MySQL中:

(1)if語句:  if 條件  then 條件為真時要處理的事務

               [elseif  條件  then  條件為真時要處理的事務]  --注意在orcle中此處為:[elsif 條件 then  條件為真時要處理的事務]

               [else  要處理的事務]

               end if;

(2)loop語句:[loop_lable:]loop                  

                  要執行的sql代碼

               end loop[loop_lable];

 例子:delclare id int default 0;

        add_loop:loop            --此處orcle中是:loop

          set id=id+1;

          if id>=10 then leave add_loop;     --此處orcle中沒有leave,leave在此處的做用是退出循環

          end if;

       end loop add_loop;       --此處orcle中為end loop;

leave語句:leave lable;用來退出任何被標注的流程控制構造

leave和循環或者begin  end一起使用

iterate語句:iterate  lable;用來將執行順序轉到語句段開頭處即在此循環

iterate只可以出現在loop,repeat,while語句內

(3)repeat語句:[repeat_lable]repeat         

                    sql語句

                 until  條件

                 end repeat;

在orcle中沒有repeat帶條件的循環。

例子:declare id int default 0;

       repeat

          set id=id+1;

         until id>10;

     end repeat;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM