MySQL DLL操作--------临时表存储实战

1. 背景

  * 临时表是基于会话的(session),只在当前连接可见

* 当这个连接(会话)关闭的时候,会自动drop。

* 两个不同的连接(会话)里使用相同的临时表名,并且相互不会冲突,或者使用已经存在的表,但不是临时表的表名。

* 当这个临时表表名已存在表的时候,存在的表被隐藏了,如果临时表被drop,存在的表就可见了

  * 创建临时表用户必须有 create temporary table 权限。

* Mysql 5.7之后临时表数据存储于idbdata1文件中.

2. MySQL 5.7临时表相关文件存储

* 查看 MySQL 版本

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.18    |
+-----------+
1 row in set (0.01 sec)

* 创建临时表 temp_1

mysql> CREATE TEMPORARY TABLE temp_1(
    -> id BIGINT PRIMARY KEY NOT NULL  AUTO_INCREMENT,
    -> data json
    -> )ENGINE=INNODB CHARSET=utf8mb4;
Query OK, 0 rows affected (0.00 sec)

* 对临时表 temp_1 插入数据

mysql> INSERT INTO temp_1 SELECT NULL, JSON_OBJECT(‘name‘, ‘tom‘, ‘sex‘, ‘male‘, ‘age‘, ‘25‘);
Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0

* 查看临时表 temp_1 数据

mysql> SELECT * FROM temp_1;
+----+---------------------------------------------+
| id | data                                        |
+----+---------------------------------------------+
|  1 | {"age": "25", "sex": "male", "name": "tom"} |
+----+---------------------------------------------+
1 row in set (0.00 sec)

* 查看 temp 变量 [ 临时文件存储目录 ]

mysql> show variables like ‘tmpdir‘;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| tmpdir        | /tmp  |
+---------------+-------+
1 row in set (0.02 sec)

* 查看临时表结构定义文件 *.frm

   ‘#‘开头的代表临时表结构定义文件

mysql> system ls -l /tmp
total 18
srwxrwxrwx 1 mysql mysql    0 Jun 27 20:09 mysql.sock
-rw------- 1 mysql mysql    5 Jun 27 20:09 mysql.sock.lock
-rw-r----- 1 mysql mysql 8586 Jun 27 22:41 #sql666_9_0.frm

* 查看 datadir 变量 [ 数据存储目录 ]

mysql> show variables like ‘datadir‘;
+---------------+-------------------+
| Variable_name | Value             |
+---------------+-------------------+
| datadir       | /data/mysql_data/ |
+---------------+-------------------+
1 row in set (0.01 sec)

  * 查看临时表表数据存储文件 ibtmp1 [ 5.7之后将临时表数据存储于ibtmp1文件中 ]

mysql> system ls -l /data/mysql_data/ibtmp1
-rw-r----- 1 mysql mysql 12582912 Jun 27 22:43 /data/mysql_data/ibtmp1

3. MySQL 5.6临时表相关文件存储

  * 查看 MySQL 版本

mysql> show variables like ‘version‘;
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| version       | 5.6.36 |
+---------------+--------+
1 row in set (0.00 sec)

* 创建临时表 temp_1

mysql> CREATE TEMPORARY TABLE temp_1( 
    -> id BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT,
    -> name VARCHAR(32) NOT NULL,
    -> sex ENUM(‘male‘, ‘female‘),
    -> age INT NOT NULL
    -> )ENGINE=INNODB CHARSET=utf8mb4;
Query OK, 0 rows affected (0.06 sec)

* 对临时表 temp_1 插入数据

mysql> INSERT INTO temp_1 SELECT NULL, ‘tom‘, ‘male‘, 22;
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

* 查看临时表 temp_1 数据

mysql> INSERT INTO temp_1 SELECT NULL, ‘tom‘, ‘male‘, 22;
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM temp_1;
+----+------+------+-----+
| id | name | sex  | age |
+----+------+------+-----+
|  1 | tom  | male |  22 |
+----+------+------+-----+
1 row in set (0.00 sec)

* 查看 temp 变量 [ 临时文件存储目录 ]

mysql> show variables like ‘tmpdir‘;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| tmpdir        | /tmp  |
+---------------+-------+
1 row in set (0.00 sec)

* 查看临时表结构定义文件 *.frm和数据文件 *.ibd

[ MySQL 5.7之前临时表所有表结构定义文件和数据文件存储在 tmpdir中  ]

mysql> system ls -l /tmp
total 116
srwxrwxrwx 1 mysql mysql     0 Jun 27 22:53 mysql.sock
-rw-rw---- 1 mysql mysql  8656 Jun 27 22:57 #sqla34_4_0.frm
-rw-rw---- 1 mysql mysql 98304 Jun 27 22:58 #sqla34_4_0.ibd

4. 总结

以需求驱动技术,技术本身没有优略之分,只有业务之分。

时间: 2024-10-13 01:51:24

MySQL DLL操作--------临时表存储实战的相关文章

MySQL DDL操作--------视图最佳实战

1. 背景 * 视图是数据库中的虚拟表.包含一系列带有名称的行和列数据.视图是从一个或者多个表中导出的,视图的行为与表非常相似,用户可以使用SELECT语句查询数据,以及使用INSERT.UPDATE和DELETE修改记录,视图使用户操作更加方便而且保障数据库系统的安全. * 视图一旦定义便存储在数据库中,与其对应的数据并没有像表那样在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据.对视图的操作与对表的操作一样,可以对其进行查询.修改和删除.当对通过视图看到的数据进行修改时,相应

MySQL DML操作--------CURD最佳实战

1. 背景 * CURD 操作通常是使用关系型数据库系统中的结构化查询语言(Structured Query Language,SQL)完成的 * CURD 定义了用于处理数据的基本原子操作 * CURD 代表创建(Create).更新(Update).读取(Retrieve)和删除(Delete)操作. 2. 创建表操作 * 创建数据库(DB)  mytest CHARACTER SET: 设置字符集 mysql> CREATE DATABASE mytest CHARACTER SET ut

MySQL 5.7.17主从复制实战(一主多从)

MySQL 5.7.17主从复制实战(一主多从) 主从复制的原理: 分为同步复制和异步复制,实际复制架构中大部分为异步复制. 复制的基本过程如下: 1).Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容: 2).Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程.返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master

Mysql技术内幕——InnoDB存储引擎

一.mysql体系结构和存储引擎 1.1.数据库和实例的区别 数据库:物理操作系统或其他形式文件类型的集合.在mysql下数据库文件可以是frm,myd,myi,ibd结尾的文件. 数据库实例:由数据库后台进程/线程以及一个共享内存区组成.数据库实例才是真正用来操作数据库文件的. mysql数据库是单进程多线程的程序,与sql server比较类似.也就是说,Mysql数据库实例在系统上的表现就是一个进程. 1.2.mysql的体系结构 mysql由连接池组件.管理服务和工具组件.sql接口组建

MySQL内核:InnoDB存储引擎 卷1

MySQL内核:InnoDB存储引擎卷1(MySQL领域Oracle ACE专家力作,众多MySQL Oracle ACE力捧,深入MySQL数据库内核源码分析,InnoDB内核开发与优化必备宝典) 姜承尧 蒋鸿翔 饶珑辉 温正湖 著   ISBN 978-7-121-22908-4 2014年5月出版 定价:69.00元 360页 16开 编辑推荐 预售前100位读者送MySQL 5.6 InnoDB存储引擎的架构图 l  <高性能MySQL>配套深度阅读数据库内核解析篇 l  网易资深数据

Python/MySQL(四、MySQL数据库操作)

Python/MySQL(四.MySQL数据库操作) 一.数据库条件语句: 1 case when id>9 then ture else false 二.三元运算: 1 if(isnull(xx)0,1) 三.上下连表: select id,name from ta1 union 天然去重(检测上边的表和下边的表行内完全一样就只显示一行内容) select num,sname from tb2 ========================================== select

MySQL存储过程和临时表

MySQL创建存储过程 MySQL中,创建存储过程的基本形式如下: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body 其中,sp_name参数是存储过程的名称:proc_parameter表示存储过程的参数列表: characteristic参数指定存储过程的特性:routine_body参数是SQL代码的内容,可以用BEGIN…END来标志SQL代码的开始和结束. proc_p

MySQL之体系结构与存储实例

定义数据库和实例 在数据库领域中有两个词很容易混淆,这就是"数据库"(database)和"实例"(instance).作为常见的数据库术语,这两个词的定义如下: 数据库:物理操作系统文件或其他形式文件类型的集合.在MySQL数据库中,数据库文件可以是fm.MYD.MYI.ibd结尾的文件.当使用NDB引擎时,数据库的文件可能不是操作系统上的文件,而是存放在内存之中的文件,但是定义仍然不变. 实例:MySQL数据库由后台线程以及一个共享内存区组成.共享内存可以被运行

MySQL中常用的存储引擎(MyISAM 和InnoDB)

 数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用存储引擎进行创建.查询.更新和删除数据操作.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能.现在许多的数据库管理系统都支持多种不同的存储引擎.MySQL的核心就是存储引擎. 使用 SHOW ENGINES; 命令查看MySQL支持的存储引擎,  Support 列表示某种引擎是否可以使用,YES表示可以,NO表示不可以,DEFAULT表示当前默认存储引擎. mysql> SH