MSSQL 與 MYSQL
都是SQL DATABASE,
只要會 SQL 語法 (insert, update, delete, select) 就可以執行基本的資料庫操作
不過使用起來還是有些微差距:
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. 常見語法
在語法方面,幾乎是一樣的。
SELECT、DISTINCT、WHERE
SELECT DISTINCT column_name,column_name
FROM table_name
WHERE column_name operator value;
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;
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
INSERT INTO
INSERT INTO table_name
VALUES (value1,value2,value3,...);
VALUES (value1,value2,value3,...);
and
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
VALUES (value1,value2,value3,...);
UPDATE
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
DELETE
DELETE FROM table_name
WHERE some_column=some_value;
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
FROM table_name
EX2:
SELECT DISTINCT column_name,column_name
FROM table_name
FROM table_name
LIMIT 1
WHERE column_name operator value;
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:
取4到6筆,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:「輸入與輸出、input與output」用的參數。同時具有「IN」與「OUT」兩種用途
EX2:
上圖紅框處可以看到,三種應用方式。
呼叫方式為:
SET @DDDD = 1;
CALL test(1,3,@AAAA,@DDDD);
SELECT @AAAA,@DDDD
結果為@AAAA=3,@DDDD=0
第一個與第二個變數為IN,需要輸入值
第三個變數為OUT,需用變數去接
第四個有IN與OUT,所以變數可設定值帶入。
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即可。