当前位置: 首页 > 文档资料 > MySQL 中文手册 >

16.8. 打开表

优质
小牛编辑
132浏览
2023-12-01

在表上执行任何读或写操作之前,MySQL服务器将调用open()方法打开表数据和索引文件(如果存在的话)。

int open(const char *name, int mode, int test_if_locked);

第1个参数是要打开的表的名称。第2个参数确定了要打开的文件或准备执行的操作。它们的值定义于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    /* File opened as readonly */
#define HA_TRY_READ_ONLY 32    /* Try readonly if can't open with read and write */
#define HA_WAIT_IF_LOCKED64      /* Wait if locked on open */
#define HA_ABORT_IF_LOCKED     128       /* skip if locked on open.*/
#define HA_BLOCK_LOCK      256   /* unlock when reading some records */
#define HA_OPEN_TEMPORARY512

最后一个选项规定了是否要在打开表之前检查表上的锁定。

在典型情况下,存储引擎需要实施某种形式的共享访问控制,以防止在多线程环境下的文件损坏。关于如何实施文件锁定的示例,请参见sql/examples/ha_tina.cc的get_share()和free_share()方法。