我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL中怎么创建和删除临时表

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL中怎么创建和删除临时表

这篇文章将为大家详细讲解有关MySQL中怎么创建和删除临时表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1.介绍:

MySQL临时表,属于session级别,当session退出时,临时表被删除。临时表允许与其他表同名,并单独维护在thd的结构体中;因此,不同的session可以创建同名的临时表,并且只操作自己拥有的临时表;

创建临时表的语法很简单:

root@test 03:26:44>show create table tmp1\G

*************************** 1. row ***************************

       Table: tmp1

Create Table: CREATE TEMPORARY TABLE `tmp1` (

  `a` int(11) NOT NULL AUTO_INCREMENT,

  `b` int(11) DEFAULT NULL,

  `c` int(11) DEFAULT NULL,

  PRIMARY KEY (`a`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1

1 row in set (0.00 sec)

当创建临时表后,会在tmp文件夹下生成两个文件:

#sql3e95_1a_0.frm

#sql3e95_1a_0.ibd

那么MySQL本身究竟是如何创建和删除临时表的呢?

2.创建

执行SQL:

CREATE TEMPORARY TABLE `tmp1` (   `a` int(11) NOT NULL AUTO_INCREMENT,   `b` int(11) DEFAULT NULL,   `c` int(11) DEFAULT NULL,   PRIMARY KEY (`a`) );

1)断点:ysql_execute_command

_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                 ---------------主要分析这个函数

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-------------------------------------------------------------打开临时表

                            (1)构建table和table_share结构体

                            (2)将table结构体加入到thd->temporary_tables链表中

4009      error= write_create_table_bin_log----------------------------------------------写入binlog

3.删除临时表

手动执行 drop table tmp1

mysql_execute_command

      case SQLCOM_DROP_TABLE:

            mysql_rm_table

                mysql_rm_table_part2

                          for (table= tables; table; table= table->next_local)

                                     drop_temporary_table-----------------------------从thd->temporary_tables上查找临时表           

                                                           调用close_temporary_table来关闭、删除临时表文件,并从thd->temporary_tables上删除相应节点

                                     if (!drop_temporary)-------------------------------当删除的是非临时表时,执行下面的逻辑

----------------------------------------

4. 当session退出时。

看看堆栈:

Breakpoint 16, rm_temporary_table (base=0xc8c560, path=0x1427c10 "/u01/mysql-5148.stock/tmp/#sql3e95_1d_0") at sql_base.cc:5634

5634    bool rm_temporary_table(handlerton *base, char *path)

(gdb)

5641      strmov(ext= strend(path), reg_ext);

(gdb) bt

#0  rm_temporary_table (base=0xc8c560, path=0x1427c10 "/u01/mysql-5148.stock/tmp/#sql3e95_1d_0") at sql_base.cc:5641

#1  0x00000000005f6eaa in close_temporary (table=0x1427030, free_share=true, delete_table=true) at sql_base.cc:1928

#2  0x00000000005f725f in close_temporary_tables (thd=0x14065f0) at sql_base.cc:1549

#3  0x0000000000592d9b in THD::cleanup (this=0x14065f0) at sql_class.cc:967

#4  0x00000000005a3579 in unlink_thd (thd=0xc8c560) at mysqld.cc:1858

#5  0x00000000005a35dc in one_thread_per_connection_end (thd=0xc8c560, put_in_cache=16) at mysqld.cc:1945

#6  0x00000000005ac208 in handle_one_connection (arg=0x14065f0) at sql_connect.cc:1141

#7  0x0000003e638064a7 in start_thread () from /lib64/libpthread.so.0

#8  0x0000003e630d3c2d in clone () from /lib64/libc.so.6

#9  0x0000000000000000 in ?? ()

在session结束的时候,会调用THD::cleanup来做临时表的清理工作

关于MySQL中怎么创建和删除临时表就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL中怎么创建和删除临时表

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ORCAL 临时表创建,删除

一.Orcal临时表分类1.会话级临时表:1).保存一个会话Session的数据。2).当会话退出时,临时表数据自动清空。表结构与元数据还存储在用户数据字典。总结:会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自
ORCAL 临时表创建,删除
2018-10-01

mysql创建临时表怎么使用

要使用MySQL中的临时表,可以按照以下步骤操作:使用CREATE TEMPORARY TABLE语句创建临时表。语法如下:CREATE TEMPORARY TABLE table_name (column1 datatype,colum
mysql创建临时表怎么使用
2024-04-09

sql中临时表怎么创建

创建 sql 临时表步骤如下:使用 create temporary table 语法创建表,指定表名和列定义。添加数据并对临时表进行操作,就像操作普通表一样。会话结束后,临时表将自动删除,或使用 drop table 语法手动删除。SQL
sql中临时表怎么创建
2024-05-10

mysql什么时候创建临时表

MySQL中临时表在以下情况下被创建:1、当执行包含“CREATE TEMPORARY TABLE”语句时,会创建一个临时表,只在当前的数据库连接中存在,并且在连接关闭后会自动删除;2、当执行一些复杂的查询或排序操作时,MySQL可能会在内
2023-07-28

sql临时表怎么创建和使用

在SQL中,可以使用CREATE TABLE语句来创建临时表。临时表是在当前会话中存在的表,一旦会话结束,临时表就会自动被删除。创建临时表的语法如下:CREATE TEMPORARY TABLE table_name (column1
sql临时表怎么创建和使用
2024-04-09

MySQL创建临时表的语句怎么写

在MySQL中,可以使用CREATE TABLE语句来创建临时表。临时表是一种在当前会话中存在,并在会话结束后自动删除的表。下面是创建临时表的语句格式:CREATE TEMPORARY TABLE table_name (column
MySQL创建临时表的语句怎么写
2024-04-09

mysql创建临时表很慢怎么解决

有几种方法可以尝试解决MySQL创建临时表慢的问题:调整临时表内存限制:可以通过修改tmp_table_size和max_heap_table_size参数的值来增加临时表的内存限制。这样可以减少临时表的磁盘读写操作,提高创建速度。优化查询
mysql创建临时表很慢怎么解决
2024-04-09

mysql创建临时表报错怎么解决

当MySQL创建临时表时报错,可能存在以下几种解决方案:检查SQL语句是否正确:确保CREATE TEMPORARY TABLE语句的语法正确,包括表名、字段名、数据类型等是否正确。检查权限:确保当前用户拥有创建临时表的权限。如果没有权限,
mysql创建临时表报错怎么解决
2024-04-09

db2怎么删除临时表空间

要删除临时表空间,您可以使用以下步骤:首先,确保没有任何连接到数据库的应用程序或会话正在使用该临时表空间。您可以使用以下命令检查活动连接:SELECT APPLICATION_HANDLE, APPLICATION_ID, AGENT_I
db2怎么删除临时表空间
2024-04-09

Oracle怎么删除临时表空间

要删除Oracle临时表空间,您可以按照以下步骤进行操作:首先,确保没有用户正在使用临时表空间。您可以通过执行以下SQL查询来检查:SELECT username FROM v$session WHERE tablespace_name
Oracle怎么删除临时表空间
2024-04-09

MySQL怎么建临时表

在MySQL中,可以使用CREATE TEMPORARY TABLE语句来创建临时表。临时表是一种只在当前会话有效的表,它的数据仅在当前连接有效,连接断开时表将自动删除。临时表的表结构和普通表一样,可以包含多个列和索引。以下是创建临时表
2023-10-27

oracle临时表创建怎么写

要创建一个Oracle临时表,可以使用以下语法:CREATE GLOBAL TEMPORARY TABLE 表名(列名1 数据类型1,列名2 数据类型2,…)ON COMMIT {DELETE ROWS | PRESERVE
oracle临时表创建怎么写
2024-04-09

MySQL索引怎么创建和删除

这篇文章主要介绍了MySQL索引怎么创建和删除的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL索引怎么创建和删除文章都会有所收获,下面我们一起来看看吧。MySQL Index索引是一种数据结构,可以是B
2023-07-05

Python的列表怎么创建和删除

这篇文章主要讲解了“Python的列表怎么创建和删除”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python的列表怎么创建和删除”吧!1.列表定义:形式上,列表的所有元素都放在一对中括号"
2023-06-26

编程热搜

目录