广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中怎么创建和删除临时表
  • 121
分享到

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

2024-04-02 19:04:59 121人浏览 泡泡鱼
摘要

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

这篇文章将为大家详细讲解有关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中怎么创建和删除临时表就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中怎么创建和删除临时表

本文链接: https://www.lsjlt.com/news/56876.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • MySQL中怎么创建和删除临时表
    这篇文章将为大家详细讲解有关MySQL中怎么创建和删除临时表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 1.介绍: MySQL临时表,属于sessi...
    99+
    2022-10-18
  • ORCAL 临时表创建,删除
    一.Orcal临时表分类 会话级临时表: 1).保存一个会话Session的数据。 2).当会话退出时,临时表数据自动清空。表结构与元数据还存储在用户数据字典。 总结:会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话...
    99+
    2018-10-01
    ORCAL 临时表创建,删除
  • ORCAL 临时创建表与删除表
    目录一.Orcal临时表分类1.会话级临时表2.事务级临时表二.临时表创建1.会话级临时表2.事务级临时表三.删除临时表四.删除时报错1.清空表,然后删除表2.杀掉进程,然后删除一....
    99+
    2022-11-12
  • mysql什么时候创建临时表
    MySQL中临时表在以下情况下被创建:1、当执行包含“CREATE TEMPORARY TABLE”语句时,会创建一个临时表,只在当前的数据库连接中存在,并且在连接关闭后会自动删除;2、当执行一些复杂的查询或排序操作时,MySQL可能会在内...
    99+
    2023-07-28
  • MySQL怎么建临时表
    在MySQL中,可以使用CREATE TEMPORARY TABLE语句来创建临时表。 临时表是一种只在当前会话有效的表,它的数据仅...
    99+
    2023-10-27
    MySQL
  • MySQL-创建、修改和删除表
    朱门酒肉臭路有冻死骨 文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。 ...
    99+
    2023-09-10
    mysql java 数据库
  • MySQL 中怎么创建临时目录
    MySQL 中怎么创建临时目录,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。MySQL 服务器设置的 binlog 单文件最大为 1GB,...
    99+
    2022-10-18
  • sql server中怎么查找并删除临时表
    sql server中怎么查找并删除临时表,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。if exists(select * f...
    99+
    2022-10-18
  • MySQL中怎么创建和删除索引
    MySQL中怎么创建和删除索引,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.索引作用   在索引列上,除了上面提到...
    99+
    2022-10-18
  • Oracle临时表空间删除和重建实现过程
    目录一、临时表空间概念二、重建oracle临时表空间过程三、查询TEMP TABLESPACE利用率3.1 script 13.2 script 23.3 script 3一、临时表...
    99+
    2022-11-13
  • MySQL索引怎么创建和删除
    这篇文章主要介绍了MySQL索引怎么创建和删除的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL索引怎么创建和删除文章都会有所收获,下面我们一起来看看吧。MySQL Index索引是一种数据结构,可以是B...
    99+
    2023-07-05
  • Python的列表怎么创建和删除
    这篇文章主要讲解了“Python的列表怎么创建和删除”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python的列表怎么创建和删除”吧!1.列表定义:形式上,列表的所有元素都放在一对中括号&...
    99+
    2023-06-26
  • Oracle中如何创建和使用临时表
    这篇文章将为大家详细讲解有关Oracle中如何创建和使用临时表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。ORACLE数据库除了可以保存永久表外,还可以建...
    99+
    2022-10-18
  • MySQL怎么创建多个表的更新与删除
    本篇内容主要讲解“MySQL怎么创建多个表的更新与删除”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL怎么创建多个表的更新与删除”吧!1.涉及多个表的更...
    99+
    2022-10-19
  • 怎么用Mysql定时+存储过程创建临时表统计数据
    这篇“怎么用Mysql定时+存储过程创建临时表统计数据”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用Mysql定时+存...
    99+
    2023-07-05
  • MySQL创建、修改和删除表操作指南
    目录前言一、创建表1、创建表的语法形式2、设置表的主键1、单字段主键2、多字段主键3、设置表的外键4、设置表的非空约束5、设置表的唯一性约束6、设置表的属性值自动增加7、设置表的属性的默认值二、查看表结构1、查看表基本结...
    99+
    2022-08-25
  • MySQL怎么删除创建的用户
    要在MySQL中删除创建的用户,可以使用以下步骤:1. 使用root用户登录MySQL服务器。2. 执行以下命令来删除用户:DRO&...
    99+
    2023-10-18
    MySQL
  • 什么是 MySQL 临时表?我们如何创建它们?
    顾名思义,临时表是我们可以保存临时数据的表。关于临时表最重要的是,当当前客户端会话终止时它们将被删除。它可以在 CREATE 语句的帮助下创建,但我们在创建它时必须使用关键字“Temporary”。为了说明临时表的创建,我们使用以下示例 -...
    99+
    2023-10-22
  • springboot中怎么实现通过后台创建临时表
    这篇文章主要介绍“springboot中怎么实现通过后台创建临时表”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot中怎么实现通过后台创建临时表”文章能帮助大家解决问题。spring...
    99+
    2023-06-08
  • MongoDB怎么实现创建删除数据库、创建删除表、数据增删改查
    这篇文章主要介绍“MongoDB怎么实现创建删除数据库、创建删除表、数据增删改查”,在日常操作中,相信很多人在MongoDB怎么实现创建删除数据库、创建删除表、数据增删改查问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作