如何在MySQL数据库中使用内存表和临时表

  介绍

今天就跟大家聊聊有关如何在MySQL数据库中使用内存表和临时表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

内存表:

session  1   美元,mysql  -uroot   root@(没有),10:05:06> use 测试   Database 改变了   root@test  10:06:06> CREATE  TABLE  tmp_memory (小姐:INT), ENGINE =,记忆;   Query 好吧,,0,rows  affected (0.00,秒)   root@test  10:08:46> insert  into  tmp_memory  values  (1);   Query 好吧,,1,row  affected (0.00,秒)   root@test  10:08:46>   session2   美元,mysql  -uroot 测试   root@test  10:05:12> CREATE  TABLE  tmp_memory (小姐:INT), ENGINE =,记忆;   ERROR  1050, (42 s01):, Table  & # 39; tmp_memory& # 39; already 存在   root@test  10:16:27> select  *,得到tmp_memory;   +------+   |,小姐:|   +------+   |,1 |   +------+   1,row  set 拷贝;(0.00,sec)

1。多个会话,创建表的名字不能一样

2。一个会话创建会话后,对其会话也他是可见的

3。数据目录下只有tmp_memory.frm,表结构放在磁盘上,数据放在内存中

4。mysql重启或者关闭后内存表里的数据会丢失,但是表结构仍然存在

5。可以创建索引,删除索引,支持唯一索引

6。主,不影响主备库上插入的数据,备库也可以查到

7。显示表看得到表

临时表:

session1   美元,mysql  -uroot 测试   root@test  10:30:18> CREATE  TEMPORARY  TABLE  tmp_table  (name  VARCHAR (10), NOT  NULL, value  INTEGER  NOT 零);   Query 好吧,,0,rows  affected (0.05,秒)   root@test  10:31:54> select  *,得到tmp_table;   + - - - - - - - - - - - - - - - - - +   | |,name  value  |   + - - - - - - - - - - - - - - - - - +   | |,aaaaaa  10 |   + - - - - - - - - - - - - - - - - - +   1,row  set 拷贝;(0.00,sec)   session2   root@test  10:20:13>, CREATE  TEMPORARY  TABLE  tmp_table  (name  VARCHAR (10), NOT  NULL, value  INTEGER  NOT 零);   Query 好吧,,0,rows  affected (0.02,秒)   root@test  10:30:39> insert  into  tmp_table  values  (& # 39; bbbbbbb& # 39; 10);   Query 好吧,,1,row  affected (0.01,秒)   root@test  10:31:33> select  *,得到tmp_table;   + - - - - - - - - - - - - - - - - - - - +   | |,name  value  |   + - - - - - - - - - - - - - - - - - - - +   | |,bbbbbbb  10 |   + - - - - - - - - - - - - - - - - - - - +   1,row  set 拷贝;(0.00,sec)   root@test  10:31:43>退出   再见   [1,单:MS-Master  db152011.sqa.cm6:, mysql  ~,)   美元,mysql  -uroot 测试   root@test  10:32:17> select  *,得到tmp_table;   ERROR  1146, (42 s02):, Table  & # 39; test.tmp_table& # 39;,并# 39;t 存在   root@test  10:32:22>   root@test  10:32:23>

1。创建的表的名字可以一样

2。表结构和数据都放在内存中

3。会话消失表结构和数据都消失

4。可以创建索引,删除索引

5。主库创建的表,备库查不到,

6。显示表看不到表

<强>使用内存表需要注意的事项

1。内存表需要自己删除数据或表下降者,需要降权限,这点比较危险

2。内存表的表结构是保存在磁盘上的,如果多个会话使用同一个表名,会存在冲突;如果不需要使用表名,如果使用一次都需要创建表结构,到时候会有很多小文件存在,不利于db的维护,dba清理表也有风险;

<>强基于以上不适合用内存表

1。临时表是会话级别的,即使多个会话创建的表名一样,都相互不影响

2。会话消失,所有的都消失,这点很不利于应用排查问题

另外这两个都需要消耗额外的内存空间,虽然db端可以忍受,但是不太可控;db端还有这个参数:

max_tmp_tables一个客户能同时保持打开的临时表的最大数量,这个值默认32岁,可以根据需要调整此值

<强>补充:mysql创建临时表,将查询结果插入已有表中

今天遇到一个很棘手的问题,想临时存起来一部分数据,然后再读取。我记得学数据库理论课老师说可以创建临时表,不知道mysql有没有这样的功能呢?临时表在内存之中,读取速度应该比视图快一些。然后还需要将查询的结果存储到临时表中。

如何在MySQL数据库中使用内存表和临时表