对于事物:InnoDB,NDB Cluster和BDB存储引擎支持事物,如果使用MyISAM等引擎则会忽略事物语句。
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
--SQL_CALC_FOUND_ROWS记录查询结果集的行数,忽略LIMMIT语句,然后使用FOUND_ROWS获取行数
select_expr [, select_expr ...]
[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