對於事物:InnoDB,NDB Cluster和BDB存儲引擎支持事物,若是使用MyISAM等引擎則會忽略事物語句。web
[ALL | DISTINCT | DISTINCTROW ]數據庫
[HIGH_PRIORITY]express
[STRAIGHT_JOIN]緩存
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]服務器
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]oracle
--SQL_CALC_FOUND_ROWS記錄查詢結果集的行數,忽略LIMMIT語句,而後使用FOUND_ROWS獲取行數分佈式
select_expr [, select_expr ...]ide
[FROM table_references函數
[PARTITION partition_list]性能
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]--發送SQL語句到另一個過程做爲標準輸入,能夠是函數、存儲過程
[INTO OUTFILE 'file_name' --導出到指定文件
[CHARACTER SET charset_name] --指定字符集
[FIELDS TERMINATED BY 'character'] --分割字段的字符。默認狀況下是製表符
[FILEDS ENCLOSED BY 'character']--在每一個字段先後用的字符
[ESCAPED BY 'character']--在輸出中用以跳出指定字符,默認字符是/
[LINES [STARTING BY 'character'] --每行開始用到的字符,默認狀況下不使用任何字符
[TERMINATED BY 'character']]-- 每行末尾用到的字符。默認狀況下是換行符
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]]
exmple:
SELECT SQL_CALC_FOUND_ROWS goods_id,goods_name from tdb_goods;
SELECT FOUND_ROWS();
SHOW ERRORS [LIMIT [offset,] count];--顯示錯誤信息,結果是僅針對於前面以執行的語句起做用
SHOW WARNINGS [LIMIT [offset,] count]; --當前會話的之前SQL語句顯示的警告信息、出錯信息和註釋
XA語法:分佈式事務
XA {START|BEGIN} xid [JOIN|RESUME] --開始一個XA分佈式事務
XA END xid [SUSPEND [FOR MIGRATE]] --結束一個XA分佈式事物
XA PREPARE xid --將事物標記爲PREPARE
XA COMMIT xid [ONE PHASE] --帶ONE PHASE用於標記已制定爲預備和提交的是XA事物,不帶則會提交併終止整個事物
XA ROLLBACK xid --撤銷給定的XA事物並終止它
XA RECOVER --列舉類處於PREPARE狀態的事物
ANALYSE()函數:返回SELECT語句對結果表的分析,僅做爲PRECODURE字句的一個組成部分
ANALYSE([maximum_elements[,maxmum_memory]])
exmple : SELECT * FROM tdb_goods PROCEDURE ANALYSE()\G
BENCHMARK()函數 :用戶評估MYSQL服務器的性能
BENCHMARK(number,expression)--number爲表達式重複的次數,expression表達式
DATABASE()--返回當前會話中用到的數據庫名
FOUND_ROWS()--與帶有SQL_CALC_FOUND_ROWS選項的SELECT語句一塊兒使用,以肯定使用LIMIT字句的SQL語句在沒有限制的狀況下所返回的行數。
LAST_INSERT_ID():返回當前客戶端MYSQL鏈接所插入的最後行的標識號,如一條SQL語句插入多行,則返回插入第一行所產生的標識號
ROW_COUNT():返回前面執行SQL語句所修改的行數,如不是INSERT,UPDATE,DELETE,該函數將返回1
START TRANSACTION 開始一項新的事物;
COMMIT:用於提交事務,但在代碼控制以前,須先關閉自動提交事務設置:SET AUTOCOMMIT=0(1爲開啓);
ROLLBACK:用於回滾事務,但在代碼控制以前,須先關閉自動提交事務設置:SET AUTOCOMMIT=0(1爲開啓);
RELEASE SAVEPOINT語法
RELEASE SAVEPOINT identifier --指示服務器從當前事物中釋放掉前面的用SAVEPOINT語句命名的保存點
ROLLBACK TO SAVEPOINT identifier
SAVEPOINT identifier
SET TRANSACTION 語法:設置當前事物的隔離等級
SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL
[READ UNCOMMITED | READ COMMITED|REPEATABLE READ|SERIALIZABLE]
--READ UNCOMMITED 髒讀
-- READ COMMITED 先後讀取一致;在一個事物中提交的數據,在另外一個事物中能看到,所以同一個事物同一查詢可能返回不一樣的查詢結果。與oracle隔離級相似
-- REPEATABLE READ 它令一個事物的全部讀取操做一致。默認事物等級
在DELETE、INSERT語句時,關鍵字符釋義
DELETE [LOW_PRIOPITY] [QUICK] [IGNORE] FROM table [,table] FROM table[,...] [WHERE condition]。
INSERT [LOW_PRIOPITY|DELAYED|HIGH_PRIOPITY] [IGNORE] [INTO] table
(SET cloumn ({expression|DEFAULT},...))/(VALUES cloumn ({expression|DEFAULT},...))
LOW_PRIOPITY:指示服務器等待,直到在刪除行以前在命名的表上沒有任何查詢爲止,這個關鍵字僅容許在表級鎖定的存儲引擎(如MyISAM,MEMORY,MARGE)
QUICK:對於MyISAM表,使用關鍵字QUIK能夠加快刪除操做的速度,而不會在索引樹中合併索引的葉子。
IGNORE:指示MYSQL遇到錯誤也會繼續執行,隨後可使用SHOW WARNINGS語句來檢索出錯的信息。
EXPLAIN語法
EXPLAIN table --等同於DESC、SHOW COLUMNS語法
EXPLAIN [EXTENDED|PARITIONS] SELECT ... --用於查詢SQL的執行計劃
EXPLAIN語句結果的select_type
類型 | 基本含義 |
SIMPLE | 指示簡單的SELECT語句,沒有子查詢或者UNION |
PRIPARY | 當使用子查詢時,這是主要的SELECT語句 |
UNION | 當子查詢語句時,這是主要的SELECT語句 |
DEPENDENT UNION | 當使用union時,這並非第一個SELECT語句,取決於主查詢 |
UNION RESULT | UNION的結果 |
SUBQUERY | 子查詢中的第一個SELECT語句 |
DEPENDENT SUBQUERY | 子查詢中的第一個SELECT語句,取決於主查詢 |
DERIVED | 來源於子查詢的表 |
UNCACHEABLE SUBQUERY | 來源於子查詢的表 |
UNCACHEABLE UNION |
指示子查詢的union中,結果不能緩存,所以必須對主查詢中的每一行從新評價 |
HELP語法
HELP [{'commad | reserve _word'}] exg:HELP SELECT;
索引提示:指定表運行執行相對應的索引
SELECT ...|UPDATE....|DELETE...
table ... JOIN table
USE {INDEX|KEY} [{FOR {JPOM|ORDER BY |GROUP BY}}] ([index[,...]])
FORCE {INDEX|KEY} [{FOR {JPOM|ORDER BY |GROUP BY}}] ([index[,...]]) --指示MYSQL試圖對指定的索引限制索搜
IGNORE {INDEX|KEY} [{FOR {JPOM|ORDER BY |GROUP BY}}] ([index[,...]])--指示MYSQL試圖對指定的索引限制索搜
example:
select client_name,count(*) as ticke
FROM work_req
USE INDEX FOR JOIN (workreq_date_key)
USING (client_id)
WHERE client_type=1 ADD DATEDIFF(NOW(),request_date)<91 group by client_id;
LOAD DATE INFILE語法:把文本的數據加入到表中
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'--LOW_PRIORITY在每人查詢的時候導入,CONCURRENT任意時候
[REPLACE | IGNORE] --REPLACE 遇到重複數據進行替換;IGNORE遇到錯誤並繼續加載其餘行
INTO TABLE tbl_name
[PARTITION (partition_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 | ROWS}] --從N行開始讀取
[(col_name_or_user_var,...)] --導入到表中的列明
[SET col_name = expr,...] --SET更新表達式
REPLACE 語法:若是表中存在相同的行,則直接進行替換
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
[PARTITION (partition_name,...)]
[(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
SELECT 語句:
SELECT