相較於昨天的Data Definition Statements, Data Manipulation Statements相較之下少很多
- CALL
呼叫Stored Procedure執行的指令, 完整語法為
CALL sp_name([parameter[,...]])
CALL sp_name[()]
例如
CALL p;
CALL p(a, b, c);
- DELETE: 刪除資料錄的指令
- DO
完整指令為
DO expr [, expr] ...
就相當於
SELECT expr [, expr] ...
是做數值指定運算用的
例: DO a = 10;
- HANDLER
完整指令有
HANDLER tbl_name OPEN [ [AS] alias]
HANDLER tbl_name READ index_name { = | >= | <= | < } (value1,value2,...)
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ { FIRST | NEXT }
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name CLOSE
有些像是Snapshot的應用, 提一個到資料表的快速存取通道.
HANDLER ... READ...
很像是SELECT指令的作用, 但因為是直接讀取資料表內容, 所以速度快很多
- INSERT: 新增資料錄的指令
- LOAD DATA INFILE
完整指令為
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...]
是直接把外部檔案內容讀入存到資料表中的指令, 例如Excel檔案, 可以另存為CSV格式的檔案, 再用LOAD DATA INFILE指令轉入資料表中
- REPLACE
完整指令為
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
這在有Primary Key設置的資料表中新增一筆資料時特別有用...
例如Sales_Order_Header表中有SalesID欄位且為Primary Key
INSERT INTO Sales_Order_Header VALUES ('10001', 'Simon', ... )
INSERT INTO Sales_Order_Header VALUES ('10001', 'Johnson', ....)
此時第二個INSERT會導致Duplicate Key的錯誤訊息而停止作業
我們可以:
REPLACE INTO Sales_Order_Header VALUES ('10001', 'Johnson', ...)
這樣可以把10001銷貨單的訂購人變更為Johnson...而不會出現錯誤訊息.
如果
REPLACE INTO Sales_Order_Header VALUES ('10002', 'Simon', ...)
這樣會把10002銷貨單新增到Sales_Order_Header中
- SELECT: 查詢資料的指令
- Subquery:
舉個簡單的例子
DELETE FROM t1
WHERE s11 > ANY
(SELECT COUNT(*) /* no hint */ FROM t2
WHERE NOT EXISTS
(SELECT * FROM t3
WHERE ROW(5*t2.s1,77)=
(SELECT 50,11*s1 FROM t4 UNION SELECT 50,77 FROM
(SELECT * FROM t5) AS t5)));
出現在WHERE條件下的SELECT句子就是Subquery
Subquery可以另外一篇專門討論, 我們明天就針對SUbquery做個討論
- TRUNCATE: 清除資料表的指令
- UPDATE: 更新資料錄的指令, REPLACE指令很類似, 但可新增資料錄