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
该HANDLER
语句提供对表存储引擎接口的直接访问。它可用于
InnoDB
和MyISAM
表。
该HANDLER ... OPEN
语句打开一个表,使其可以使用后续HANDLER ...
READ
语句访问。此表对象不被其他会话共享,并且在会话调用
HANDLER ... CLOSE
或会话终止之前不会关闭。
如果使用别名打开表,则使用其他HANDLER
语句进一步引用打开的表必须使用别名而不是表名。如果不使用别名,而是使用数据库名称限定的表名打开表,则进一步引用必须使用非限定表名。例如,对于使用 打开的表
mydb.mytable
,进一步的引用必须使用
mytable
。
第一种HANDLER ... READ
语法获取一行,其中指定的索引满足给定的值并且满足
WHERE
条件。如果您有一个多列索引,请将索引列值指定为逗号分隔列表。为索引中的所有列指定值,或为索引列的最左边的前缀指定值。假设一个索引my_idx
包含三个列,名称分别为col_a
、
col_b
和col_c
,顺序如下。该HANDLER
语句可以为索引中的所有三列或最左边前缀中的列指定值。例如:
HANDLER ... READ my_idx = (col_a_val,col_b_val,col_c_val) ...
HANDLER ... READ my_idx = (col_a_val,col_b_val) ...
HANDLER ... READ my_idx = (col_a_val) ...
要使用HANDLER
接口来引用表的PRIMARY KEY
,请使用带引号的标识符
`PRIMARY`
:
HANDLER tbl_name READ `PRIMARY` ...
第二种HANDLER ... READ
语法以符合
WHERE
条件的索引顺序从表中获取一行。
第三种HANDLER ... READ
语法以符合
WHERE
条件的自然行顺序从表中获取一行。它比
需要全表扫描时更快。自然行顺序是行在表数据文件中的存储顺序。此语句也适用于表,但没有这样的概念,因为没有单独的数据文件。
HANDLER
tbl_name
READ
index_name
MyISAM
InnoDB
如果没有LIMIT
子句,所有形式的
HANDLER ... READ
获取单行(如果可用)。要返回特定数量的行,请包含一个
LIMIT
子句。它具有与语句相同的语法
SELECT
。请参阅
第 13.2.9 节,“SELECT 语句”。
HANDLER ... CLOSE
关闭一个用打开的表HANDLER ... OPEN
。
HANDLER
使用接口而不是普通SELECT
语句
有几个原因:
HANDLER
比SELECT
: 快HANDLER
可以更容易地移植到使用类似低级ISAM
接口的 MySQL 应用程序。(请参阅第 14.20 节,“InnoDB memcached 插件”以获取另一种方法来调整使用键值存储范例的应用程序。)HANDLER
使您能够以 . 难以(甚至不可能)完成的方式遍历数据库SELECT
。HANDLER
在使用为数据库提供交互式用户界面的应用程序时, 该 界面是一种更自然的查看数据的方式。
HANDLER
是一个有点低级的声明。例如,它不提供一致性。即
HANDLER ... OPEN
不对表做
快照,不
锁表。这意味着在发出语句后,可以修改表数据(由当前会话或其他会话)并且这些修改可能仅部分可见或扫描。
HANDLER ...
OPEN
HANDLER ...
NEXT
HANDLER ... PREV
打开的处理程序可以关闭并标记为重新打开,在这种情况下,处理程序将失去其在表中的位置。当以下两种情况都为真时,就会发生这种情况:
任何会话
FLUSH TABLES
在处理程序的表上执行或 DDL 语句。打开处理程序的会话执行
HANDLER
使用表的非语句。
TRUNCATE TABLE
for a table 关闭用打开的表的所有处理程序
HANDLER OPEN
。
如果用 刷新表,用
打开,则处理程序被隐式刷新并失去其位置。
FLUSH
TABLES
tbl_name
WITH READ
LOCKHANDLER
HANDLER
分区表不支持。