当前位置: 首页 > 图文教程 > 数据库 > MYSQL > MysQL:浅谈MysQL中HANDLER语法介绍及使用

MYSQL
Linux环境MySQL服务器级优化讲解
MySQL在命名用过程中所遇到的常见问题
MySQL数据库只监听某个特定地址的方法
MySQL数据库管理必备工具 phpMyAdmin 3.0
MySQL中两种快速创建空表的方式的区别
讲解MySQL数据库的数据类型和建库策略
请正确认识MySQL对服务器端光标的限制
如何在MySQL查询结果集中得到记录行号
在SUSE10环境下安装和配置MySQL数据库
由浅入深讲解MySQL数据库索引的选择性
轻松掌握MySQL数据库锁机制的相关原理
一种特别简单的MySQL数据库安装方法
实例讲解如何配置MySQL数据库主从复制
MySQL数据库中的重要数据应当如何保护
详细讲解MySQL数据库对文件操作的封装
深入了解MySQL的数据类型以及建库策略
解决MySQL数据库中与优化器有关的问题
向MySQL数据库的表中录入数据的实用方法
MySQL数据库中的各种乱码及其解决方法
快速掌握怎样选择准备安装的 MySQL版本

MYSQL 中的 MysQL:浅谈MysQL中HANDLER语法介绍及使用


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 119 ::
收藏到网摘: n/a

今天小编要和大家说的是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

HANDLER语句提供通往表存储引擎接口的直接通道。HANDLER可以用于MyISAMInnoDB表。

HANDLER...OPEN语句用于打开一个表,通过后续的HANDLER...READ语句建立读取表的通道。本表目标不会被其它线程共享,也不会关闭,直到线程调用HANDLER...CLOSE或线程中止时为止。如果您使用一个别名打开表,则使用其它HANDLER语句进一步参阅表是必须使用此别名,而不能使用表名。

如果被指定的索引满足给定的值并且符合了WHERE条件,则第一个HANDLER...READ语法取出一行。如果您有一个多列索引,则指定索引列值为一个用逗号隔开的清单。既可以为索引中的所有列指定值,也可以为索引列的最左边的前缀指定值。假设一个索引包括三个列,名称为col_a, col_b,col_c,并按此顺序排列。HANDLER语句可以为索引中的所有三个列指定值,或者为一个最左边前缀中的各列指定值。举例说明:

HANDLER ... index_name = (col_a_val,col_b_val,col_c_val) ...

HANDLER ... index_name = (col_a_val,col_b_val) ...

HANDLER ... index_name = (col_a_val) ...

第二个HANDLER...READ语法按索引的顺序从表中取出一行。索引的顺序符合WHERE条件。

第三个HANDLER...READ语法按自然行的顺序从表中取出一行。自然行的顺序符合WHERE条件。当想要对整个表进行扫描时,此语句比HANDLER tbl_name READ index_name更快。自然行的顺序指的是行存储在MyISAM表数据文件的顺序。本语句也适用于InnoDB表,但是因为没有独立的数据文件,所以没有这类概念。

不使用LIMIT子句时,所有形式的HANDLER...READ语句均只取出一行。 如果要返回多个行,应加入一个LIMIT子句。本语句于SELECT语句的语法一样。

HANDLER...CLOSE用于关闭使用HANDLER...OPEN打开的表。

注释:要使用HANDLER接口来查阅一个表的PRIMARY KEY,应使用带引号的识别符`PRIMARY`

HANDLER tbl_name READ `PRIMARY` > (...);

HANDLER是比较低级别的语句。例如,它不能提供一致性。也就是说,HANDLER...OPEN不能为表做快照,也不能锁定表。这意味着,当一个HANDLER...OPEN语句被编写后,表数据可以被更改(用此线程或用其它线程),并且这些更改只会部分地出现在HANDLER...NEXTHANDLER...PREV扫描中。

使用HANDLER接口代替常规的SELECT语句有多个原因:

·         HANDLERSELECT更快:

o        一个指定的存储引擎管理程序目标为了HANDLER...OPEN进行整序。该目标被重新用于该表的后续的HANDLER语句;不需要对每个语句进行重新初始化。

o        涉及的分析较少。

o        没有优化程序或查询校验开销。

o        在两个管理程序请求之间,不需要锁定表。

o        管理程序接口不需要提供外观一致的数据(例如,允许无条理的读取),所以存储引擎可以使用优化,而SELECT通常不允许使用优化。

·         有些应用程序使用与ISAM近似的接口与MySQL连接。使用HANDLER可以更容易地与这些应用程序连接。

·         HANDLER允许您采用一种特殊的方式进出数据库。而使用SELECT时难以采用(或不可能采用)这种方式。有些应用程序可以提供一个交互式的用户接口与数据库连接。当与这些应用程序同时使用时,用HANDLER接口观看数据更加自然。