今天就跟大家聊聊有关如何在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有没有这样的功能呢?临时表在内存之中,读取速度应该比视图快一些。然后还需要将查询的结果存储到临时表中。