10bet网址
MySQL内部手册


23.18.18开放

目的

打开一个表。

剧情简介

虚拟int打开(

的名字

模式

test_if_locked)

const char *

的名字

int

模式

使用uint

test_if_locked

描述

这是开放方法。

用于打开桌子。名称将是文件的名称。需要打开表时才打开表。例如,当一个请求对表进行选择时(表不是对每个请求都打开或关闭的,它们会被缓存)。

从处理程序。处理程序:cc: ha_open()。服务器通过调用ha_open()打开所有表,然后调用特定于处理程序的open()。

处理程序对象是作为其初始化的一部分打开的,并且是在用于普通查询之前打开的(通常不是在元数据更改之前)。如果对象被打开,在被删除之前也会被关闭。

这是开放方法。开放调用以打开数据库表。

第一个参数是要打开的表的名称。第二个参数决定要打开什么文件或要进行什么操作。中定义的值handler.h并抄录于此,以供参考:

#define HA_OPEN_KEYFILE 1 #define HA_OPEN_RNDFILE 2 #define HA_GET_INDEX 4 #define HA_GET_INFO 8 /* do a ha_info() after open */ #define HA_READ_ONLY 16 /*文件打开为只读*/ #define HA_TRY_READ_ONLY 32 /*尝试只读如果无法读写打开*/ #define HA_WAIT_IF_LOCKED 64 /*等待如果锁定打开*/ #define HA_ABORT_IF_LOCKED 128 /*跳过如果锁定打开。*/ #define HA_BLOCK_LOCK 256 /*读取某些记录时解锁*/ #define HA_OPEN_TEMPORARY 512

最后一个选项指示处理程序是否应该在打开表之前检查表上的锁。

通常情况下,您的存储引擎需要实现某种形式的共享访问控制,以防止多线程环境中的文件损坏。有关如何实现文件锁定的示例,请参见get_share ()而且free_share ()的方法sql / / ha_tina.cc例子

参数

  • 的名字

  • 模式

  • test_if_locked

返回值

没有返回值。

使用

这个例子来自CSV存储引擎:

int ha_tina::open(const char *name, int模式,uint test_if_locked) {DBUG_ENTER("ha_tina::open");如果(!(share= get_share(name, table))))thr_lock_data_init(共享- >锁,锁,NULL);ref_length = sizeof (off_t);DBUG_RETURN (0);}