2014年11月13日 星期四

MSSQL 到 MYSQL

MSSQL MYSQL
都是SQL DATABASE
只要會 SQL 語法 (insert, update, delete, select) 就可以執行基本的資料庫操作
不過使用起來還是有些微差距:

1.    CREATE

MSSQL

MYSQL


從上下兩張圖MSSQL=>MYSQL,我們可以看出:
(1)   拿掉 [dbo]
(2)   [ ] ` `` 符號是 TAB鍵上面那個 ~ 鍵,不是單引號
(3)   IDENTITY(1,1) AUTO_INCREMENT
(4)   nvarchar varchar
(5)   UNIQUE的用法跟位置 PRIMARY KEY 一樣
(6)   FOREIGN KEY 用法些許不同
(7)   CHECK (TEST_id > 0) 用法與位置跟 PRIMARY KEY 一樣
(8)   如果在MSSQL有用 numeric 型別,請更改為 integer
(9)   Unix 版本的 MySQL table 有大小寫區分,為避免困擾,建議 table 名稱小寫




2.    常見語法

在語法方面,幾乎是一樣的。
SELECTDISTINCTWHERE
SELECT DISTINCT column_name,column_name
FROM table_name
WHERE column_name operator value;

ORDER BY
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;

INSERT INTO
INSERT INTO table_name
VALUES (value1,value2,value3,...);
and
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

UPDATE
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;

DELETE
DELETE FROM table_name
WHERE some_column=some_value;




語法順序
SELECT  -- 想要查詢的欄位     |
FROM    -- 想要查詢的表格     |
WHERE   -- 查詢條件         
GROUP BY-- 分組設定          
HAVING  -- 分組條件          |
ORDER BY-- 排序設定          |
LIMIT   -- 限制設定          V
上到下,順序是不可變的

就算你每一個子句的寫法都沒有出錯,如果順序不對了:
EX1
SELECT DISTINCT column_name,column_name
WHERE column_name operator value;
FROM table_name
EX2
SELECT DISTINCT column_name,column_name
FROM table_name
LIMIT 1
WHERE column_name operator value;
以上兩個執行起來都是會錯誤的。

數學運算
優先順序
運算子
說明
範例
運算結果
1
%
餘數
7 % 3
1
1
MOD
餘數
7 MOD 3
1
1
*
7 * 3
21
1
/
7 / 3
2.333
1
DIV
(整數)
7 DIV 3
2
2
+
7 + 3
10
2
-
7 – 3
4






3.    取前幾筆

MSSQL


MYSQL

兩者最大差異,就在一個用TOP,一個用LIMIT

MYSQL取區間,比MSSQL好一點是,可以直接在 LIMIT做應用

EX
46筆,LIMIT 3,3 ,從第三筆 + 1 筆開始取三筆資料




4.    註解

MSSQL


MYSQL


(1)   MSSQL 註解只有 -- 來表示
(2)   MYSQL 註解有四種方式
‘-- ,sort’ 這註解持續到行尾
-- MSSQL一樣,但 -- 接註解文字中間需要空格 “-- 註解
‘#,create_date’ 這註解持續到行尾
/*這是一行註解*/
/*

這是
多行註解

*/

5.    型態
參考

6.    Stored Procedure
MYSQL 5.0後新增了這個功能
CREATE PROCEDURE 名稱(變數) 來建立PROCEDURE
MySQL每條語句的末尾,都要加上分號“;

EX1

建立完後,使用方式為:
CALL test(3,5) ,即時沒有參數呼叫時也要加 CALL test() 括號

PROCEDURE的變數除了型態設定外,還有三種應用方式:
IN:「輸入、input」用的參數。這種參數與functions中的參數完全一樣,在呼叫procedures時傳送資料給procedures用的

OUT:「輸出、output」用的參數。在呼叫procedures時,不能接收傳送的資料,不過在執行procedures時,可以設定這類參數的值,新的值在執行完成後,可以回傳給呼叫的地方使用

INOUT:「輸入與輸出、inputoutput」用的參數。同時具有「IN」與「OUT」兩種用途

EX2

上圖紅框處可以看到,三種應用方式。
呼叫方式為:
SET @DDDD = 1;
CALL test(1,3,@AAAA,@DDDD);
SELECT @AAAA,@DDDD
結果為@AAAA=3,@DDDD=0

第一個與第二個變數為IN,需要輸入值
第三個變數為OUT,需用變數去接
第四個有INOUT,所以變數可設定值帶入。




7.    Stored Function
CREATE FUNCTION 名稱(變數) 來建立FUNCTION
RETURNS (回傳型態)」與「RETURN (回傳值)」兩個是FUNCTION的關鍵字
MySQL每條語句的末尾,都要加上分號“;

EX1

建立完後,使用方式為:
SELECT test('AAA')

EX2

紅框框內的變數名稱 var1 不能與欄位名稱 content 一樣,
content = content 這樣是會錯誤的。


8.    VIEW的應用


建立完,使用方式為:
SELECT * FROM view_test

上圖紅框框內,可自行修改需要的資料。



9.    MYSQL 排程(事件)

建成一個從”2014-11-13 19:14:00”開始每天執行一次的排程
通常在MYSQL的工具裡都有介面可以建立
不用自己在寫CREATE


需要修改的話,把CREATE改成ALTER即可。