一篇文章讓Oracle程序猿學會MySql【未完待續】


一篇文章讓Oracle DB學會MySql【未完待續】

隨筆前言:

  本篇文章是針對已經能夠熟練使用Oracle數據庫的DB所寫的快速學會MySql,為什么敢這么說,是因為本人認為Oracle在功能性方面和難度方面都比MySql要高一些,所以精通Oracle的DB在學習MySql的時候,沒有必要從頭到尾再去搞一遍,只需要掌握兩者的用法區別即可。故本篇文章就針對Oracle和MySql的區別來把MySql的知識掌握住,在文章中,實例都是MySql環境下的實例,而Oracle可能知識一句話來概括,所以看本篇文章,一定要熟悉Oracle並有一定的經驗哦。

  在本篇所有涉及的實例都是圍繞scott用戶/數據庫的操作。

  當然了,如果你經驗豐富,在看文章的時候發現哪些是不合理的或者錯誤的,一定要留下你的見解,我在此先感謝了,下面我們就開始學習之旅吧!

一.用戶體驗角度。

  從用戶體驗角度來說的話,其實MySql是稍微好一些的。

  1.MySql是可以自動的將系統關鍵字改為大寫的,而Oracle不。

  2.MySql可以使用tab鍵將關鍵字自動補全,而Oralce雖然有提示,但是因為它的強大性的局限,它不可能就一個tab來補全,因為選項太多,所以Oracle沒有自動補全的功能,而是可以通過提示去手選。

  3.MySql的注釋可以使用"杠杠空格"和#來單行注釋、/*..*/多行注釋,Oracle多行注釋和它一樣,單行注釋只有--。

  4.Oracle和MySql在代碼角度上來說都是不區分大小寫的,而在查看數據的時候確是區別的。就是MySql中的數據表示時保持你輸入時的狀態,而Oracle的數據表示時,都會把英文字母搞成大寫的。

二.存儲數據角度和創建存儲單位角度。

  存儲數據角度:

  • 從宏觀上來看,Oracle在存儲數據的時候,使用的是一個數據庫下面有多個用戶,用戶下面有對象等等;而MySql是一個用戶登錄上之后,有多個數據庫,每個數據庫下面有各自的對象。
  • 從微觀上講,Oracle和MySql存儲一系列數據使用的是表空間,有系統給的,臨時的。每個表空間下還可以分區。

  創建存儲單位角度:在這里就不說Oracle了,只說MySql。

  • 創建數據庫。
CREATE DATABASE scott;
  • 查看當前所有存在的數據庫,跟Oracle中的查看用戶的概念一樣。
SHOW DATABASES;
  • 查看數據庫的定義。就是查看數據庫創建時語句,默認的字符編碼等。
SHOW CREATE DATABASE scott;
  • 刪除數據庫。
drop database scott;
  • 查看默認存儲引擎。
SHOW VARIABLES LIKE 'storage_engine';

三.常用數據類型的不同。

  數據類型的差別還是挺大了,數值類型中沒有Oracle的number,字符類型中沒有Oracle的varchar2。其他常用的大致相同,MySql也有自己特有的數據類型。

          MySql中的整數類型數據類型

類型名稱 存儲大小 說明 有符號取值范圍 無符號取值范圍
TINYINT 1字節 極小整數 -128~127 0~255
SMALLINT 2字節 小整數 -32768~-32767 0~65535
MEDIUMINT 3字節 中等大小整數 -8388608~8388607 0~16777215
INT|INTEGER 4字節 普通整數 -2147483648--2147483647 0-4294967295
BIGINT 8字節 大整數 很大 很大

 

  

 

 

 

 

 

 

 

 

 

          MySql中的浮點數類型數據類型

類型名稱 存儲大小 說明 有符號取值范圍 無符號取值范圍
FLOAT 4字節 單精度 -3.4E+38~-1.17E-38 0和1.17E-38~3.4E+38
DOUBLE 8字節 雙精度 -1.79E+308~-2.22E-308 0和2.22E-308~1.79+308
DECIMAL(M,D),DEC M+2字節 定點數 M表示總位數,D表示小數位數

 

 

 

 

 

 

 

 

 

 

          MySql中的日期與時間類型數據類型

類型名稱 日期格式 日期范圍 存儲需求
YEAR YYYY 1901~2155 1字節
TIME HH:MM:SS -838:59:59~838:59:59 3字節
DATE YYY-MM-DD 1000-01-01~9999-12-3 3字節
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~9999-12-3 23:59:59 8字節
TIMESTAMP YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 UTC~2038-01-19 03:14:07 UTC 4字節

 

 

 

 

 

 

 

 

 

 

 

 

 

 

          MySql中的字符類型數據類型

類型名稱 說明 存儲需求
CHAR(M) 固定長度 M字節,1<=M<=255
VARCHAR(M) 變長 L+1字節,L<=M,1<=M<=255
TINYTEXT 極小的非二進制字符串 L+1字節,L<2^8
TEXT 小的非二進制字符串 L+1字節,L<2^16
MEDIUMTEXT 中等大小的非二進制字符串 L+1字節,L<2^24
LONGTEXT 大的非二進制字符串 L+1字節,L<2^32
ENUM 枚舉類型,只能有一個枚舉字符串值 1或者2字節,最大65535
SET 一個設置,字符串對象可以有0個或者多個SET成員  1,2,3,4,8個字節,取決於成員的數量,最多64個成員

 

 

 

 

 

 

 

 

 

 

  

 

 

 

  char與varchar的區別。char和varchar都為4個字節的話,那么不管數據多大,都占4個字節,而varchar會根據數據所占的字節數再加1.如果數據為‘abcde’,那么char和varchar的最終結果都為‘abcd’,char為4個字節,varchar為5個字節。

 

 

 

 

 

         MySql中的二進制數據類型

類型名稱 說明 存儲需求
BIT(M) 位字段類型 大約(M+7)/8個字節
BINARY(M) 固定長度 M個字節
VARBINARY(M) 可變長度 M+1個字節
TINYBLOB(M) 極小的BLOB L+1字節,L<2^8
BLOB(M) 小的BLOB L+1字節,L<2^16
MEDIUMBLOB(M) 中等BLOB L+1字節,L<2^24
LONGBLOB(M) 大的BLOB L+1字節,L<2^32

 

 

 

 

 

 

 

 

四.對象表的不同。

  • 創建表

    在創建表之前,MySql中要先選擇在哪個database下來創建表,可以手動在工具欄那一行選,也可以在編輯框用use database_name來選擇,而Oracle中打開的編輯器就是某個用戶下的,所以不考慮這個問題。創建表的時候,MySql和Oracel中的語法和格式基本相同。

    在這里也把約束的區別總結一下。

    Oracle中的約束類型只多不少,MySql中的約束類型有主鍵,外鍵,非空,唯一,默認約束。基本的用法和格式都相同,在這里只說細節方面不同的兩點:

      1.外鍵。Oracle中外鍵約束可以直接寫在列名的后面如:id int not null references a(id),這樣就可以起到外鍵的約束作用。MySql雖然也可以這樣寫,但是卻沒有外鍵約束的效果,而是必須在所有列的后面這樣寫:FOREIGN KEY(deptno) REFERENCES dept(deptno),這樣才能起到外鍵的約束效果,如建表語句。

      2.唯一約束的不同。Oracle和MySql中都是說唯一約束的列可以有一個空值,但是在實際操作中,可能使軟件的原因把,Oracle可以有多列空值,而MySql中一個空值也不能有。

    在這里也把MySql中scott的建表語句寫下供大家操作:

 

-- 創建員工表
  CREATE TABLE EMP(
  EMPNO DECIMAL(4) PRIMARY KEY,
    ENAME VARCHAR(10),
    JOB VARCHAR(9),
    MGR VARCHAR(10),    
    HIREDATE DATE,    
    SAL DECIMAL(7,2),  
    COMM DECIMAL(7,2), 
    DEPTNO DECIMAL(2) ,
    FOREIGN KEY(deptno) REFERENCES dept(deptno)
  );
-- 創建部門表
 CREATE TABLE DEPT(
   DEPTNO DECIMAL(2) PRIMARY KEY,
   DNAME VARCHAR(14),
   LOC VARCHAR(13)
 );
-- 創建工資等級表
  CREATE TABLE SALGRADE(
    GRADE INT UNIQUE PRIMARY KEY,-- 等級`salgrade``salgrade``salgrade`
    LOSAL INT, -- 等級中最低的薪水
    HISAL INT  -- 等級中最高的薪水
  );

      3.check約束不同。MySql中也有check約束,但是沒有數據檢測效果,因此是無用的。

  • 修改表

    1.修改表名和修改列的數據類型的用法與Oracle相同。

    2.修改列名的用法不同,Oracle中是使用關鍵字COLUMN和RENAME,而MySQl只使用一個關鍵字CHANGE;並且MySql中修改列名時還要更改數據類型字段,如果不更改就設置為原先的就行了,語法如下:

      ALTER TABLE table_name CHANGE old_name new_name 新數據類型;

    3.添加列不同。Oracle在添加列的時候,可能沒有添加到指定位置的語法,我找樂很多資料都沒找到。但是MySql中可以。語法如下:

      ALTER TABLE table_name ADD new_column_name 數據類型 約束條件 [FIRST|AFTER exist_column_name]

    4.MySql中可以修改列在表中的位置。語法如下:

      ALTER TABLE talbe_name MODIFY column1_name 數據類型 FIRST|AFTER column2_name;

  • 刪除表

    1.刪除整個表。Oracle和MySql都是Drop Table table_name;不過MySql中可以使用IF EXISTS關鍵字,更高端一些。

    2.刪除表中某行。Oracle中是 ALTER TABLE table_name DROP COLUMN column_name;而MySql中則不需要COLUMN關鍵字。

    3.刪除表中的外鍵約束。

      Oracle中刪除外鍵的時候,不管你直接寫在列的后面還是寫在最后,你都得通過關鍵字CONSTRAINT 加約束名來刪除,如果你沒有添加約束名的話,系統會給你一會外鍵約束的系統名,你需要通過user_constraints視圖去查找到這個約束名,再刪除。語法是 :

        ALTER TABLE table_name DROP CONSTRAINTS 約束名;

      MySql中的語法不同,它刪除外鍵約束的時候是通過 FOREIGN KEY加外鍵約束名來刪,如果你沒有給外鍵起名字,那么可以通過SELECT * FROM table_constraints;來查到約束名再刪除。

        ALTER TABLE table_name DROP FOREIGN KEY 外鍵約束名;

  • MySql中有關表的查詢

    1.顯示當前數據下的表。

SHOW TABLES;

    2 .查看表的結構信息。

DESCRIBE emp;

    3.查看表的創建信息。

SHOW CREATE TABLE emp;

    4.查詢表的約束信息。

SELECT * FROM table_constraints;

五.DML語句的不同。

  • 插入insert

    1.單行插入數據時相同的。

    2.多行插入數據不同。MySql中可以很簡單的插入多行數據,語法如:insert into table_name values(數值1..數值n),(數值1..數值n),..,(數值1..數值n);但是Oracle中稍微有點復雜,語法如下:

  insert into table_name select 數值1,數值2,...數值n from dual union select 數值1,數值2,...數值n from dual union....union select 數值1,數值2,...數值n from dual;

  • 刪除delete

    刪除的時候Oracle中可以delete table_name來刪除,省略了from;但是MySql中必須加上from關鍵字。

  • 更改update

    更改數據時相同的。

    update table_name set column_name='what' 條件where;

  • 查詢select

    查詢有很大的不同,而且用到的運算符也挺多,我們先從運算符開始說吧,只說不一樣的。

    1.算數運算符的差別。

      Oracle中沒有求余運算符,只能調用系統函數MOD(x,y);MySql中可以通過運算符%來求余。

    2.關系運算符的差別。Oracle中有的MySql中基本上都有。MySql中還有其他的:

      LEAST       ——當有兩個或者多個參數返回時,取最小的值。相當於Oracle的函數MIN(m);

      GREATEST——當有兩個或者多個參數返回時,取最大的值。相當於Oracle的函數MAX(m);

      REGEXP    ——正則表達式匹配;

        '^':   匹配以該字符后面的字符開頭的字符串

        '$':    匹配以該字符后面的字符開頭的字符串

        '.':     匹配任意一個單字符

        '...':   匹配方括號的任意字符。范圍用-來表示[0-9][a-z]

        '*':   匹配0個或多個在它前面的字符串。例如"[0-9]*"匹配任何數量的數字;".*"匹配任何數量的的任意字符。

        <=>    ——安全的等於:當兩邊的值都是NULL時,返回的是1不是NULL;當一邊的值為NULL時,返回的是0而不是NULL;

    

    3.邏輯運算符的區別。

      ORACLE中有以下獨特的。

        ANY:匹配任何一個

        ALL:匹配所有

      MySql中有以下獨特的和獨特的用法。Oracle中不可以select not 1 from dual,select 1 and 1 from dual;等等,但是MySql中卻可以,而且MySql中還不用加 from dual;

        NOT|!:邏輯非

        AND|&&:邏輯與

        OR或者||:邏輯或

        XOR:邏輯異或

    4.位運算符。

      |  位或:二進制或運算

      &  位與:二進制與運算

      ^  位異或:不同為1,相同為0的二進制運算

      << 位左移:二進制數左移,左邊丟棄,右邊補0

      >> 位右移:二進制右移,右邊丟棄,左邊補0

      ~   位取反,反轉所有比特:1取0,0取1的二進制運算。

        

 


免責聲明!

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



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