《MYSQL数据库mysql创建与删除临时表示例》要点:
本文介绍了MYSQL数据库mysql创建与删除临时表示例,希望对您有用。如果有疑问,可以联系我们。
1,mysql临时表
mysql临时表,属于session级别,当session退出时,临时表被删除.临时表允许与其他表同名,并单独维护在thd的结构体中;因此,不同的session可以创建同名的临时表,并且只操作自己拥有的临时表;MYSQL应用
创建临时表的语法很简单:
MYSQL应用
当创建临时表后,会在tmp文件夹下生成两个文件:
#sql3e95_1a_0.frm
#sql3e95_1a_0.ibd
那么mysql本身究竟是如何创建和删除临时表的呢?MYSQL应用
2.创建
执行sql:
MYSQL应用
1)断点:ysql_execute_command
mysql_execute_command:
2205 switch (lex->sql_command) {
(gdb)
2532 if (!(lex->create_info.options & ha_lex_create_tmp_table))
(gdb) p lex->create_info.options --------if语句里为false
$2 = 1
create_table_precheck------检查是否具有创建表的权限,以及表名在全局链表上是否已存在(临时表无需检查)
append_file_to_dir ------fix names if symlinked tables
if (select_lex->item_list.elements)
-------------------当为create ....select这样的语句时select_lex->item_list.elements为非0值,这里我们只考虑简单的情况
if ((result= new select_create))
res= handle_select(thd, lex, result, 0);
else
(1)mysql_create_like_table ---------------create table like...类似的语句
(2)mysql_create_table ---------------主要分析这个函数MYSQL应用
2)断点:mysql_create_table
mysql_create_table
mysql_create_table_no_lock
check_engine
file = get_new_handler
3842 set_table_default_charset(thd, create_info, (char*) db);
3844 if (mysql_prepare_create_table(thd, create_info, alter_info,
3854 path_length= build_tmptable_filename(thd, path, sizeof(path)); -----创建临时表文件名:#sql{进程id}_{thread_id}_{当前线程的临时表整数标识thd->tmp_table}
3978 rea_create_table --------------------------------------------------------------------创建frm文件和ibd文件
3986 open_temporary_table-------------------------------------------------------------打开临时表MYSQL应用
1)构建table和table_share结构体
2)将table结构体加入到thd->temporary_tables链表中
4009 error= write_create_table_bin_log----------------------------------------------写入binlogMYSQL应用
3.删除临时表
手动执行 drop table tmp1
MYSQL应用
drop_temporary_table-----------------------------从thd->temporary_tables上查找临时表
调用close_temporary_table来关闭、删除临时表文件,并从thd->temporary_tables上删除相应节点
if (!drop_temporary)-------------------------------当删除的是非临时表时,执行下面的逻辑MYSQL应用
4. 当session退出时.
看看堆栈:
MYSQL应用
在session结束时,会调用thd::cleanup来做临时表的清理工作.MYSQL应用
转载请注明本页网址:
http://www.vephp.com/jiaocheng/6491.html