創建表 |
發布時間: 2012/8/23 17:27:10 |
一旦實例化了處理程序,所需的第1個操作很可能是創建表。
你的存儲引擎必須實現create()虛擬函數:
virtual int create(const char *name, TABLE *form, HA_CREATE_INFO *info)=0; 電腦常識www.boydavid.com
該函數應創建所有必須的文件,然后關閉表。MySQL服務器將調用隨后需打開的表。 *name參數是表的名稱。*form參數是st_table結構,該結構定義了表并與MySQL服務器已創建的tablename.frm文件的內容匹配。在大多數情況下,存儲引擎不需要更改tablename.frm文件,也沒有支持該操作的預置功能。 *info參數是包含CREATE TABLE語句用于創建表所需信息的結構。該結構定義于handler.h文件中,并為了便于參考列于下面:
typedef struct st_ha_create_information
{
CHARSET_INFO *table_charset, *default_table_charset; 電腦知識www.boydavid.com
LEX_STRING connect_string;
const char *comment,*password;
const char *data_file_name, *index_file_name;
const char *alias;
ulonglong max_rows,min_rows; 電腦硬件www.boydavid.com
ulonglong auto_increment_value;
ulong table_options;
ulong avg_row_length;
ulong raid_chunksize;
ulong used_fields;
SQL_LIST merge_list; 電腦入門www.boydavid.com
enum db_type db_type;
enum row_type row_type; 電腦常識www.boydavid.com
uint null_bits; /* NULL bits at start of record */
uint options; /* OR of HA_CREATE_ options */
uint raid_type,raid_chunks;
uint merge_insert_method;
uint extra_size; /* length of extra data segment */
bool table_existed; /* 1 in create if table existed */
bool frm_only; /* 1 if no ha_create_table() */
bool varchar; /* 1 if table has a VARCHAR */
} HA_CREATE_INFO;
基本的存儲引擎能忽略*form和*info的內容,這是因為,真正所需的是創建存儲引擎所使用的數據文件,以及對數據文件的可能初始化操作(假定存儲文件是基于文件的)。 本文出自:億恩科技【www.endtimedelusion.com】 |