表类型

内存表

  1. 多个session,创建表的名字不能一样
  2. 一个session创建会话后,对其他session也是可见的
  3. data目录下只有tmp_memory.frm ,表结构放在磁盘上,数据放在内存中
  4. mysql 重启或者关闭后内存表里的数据会丢失,但是表结构仍然存在
  5. 可以创建索引,删除索引,支持唯一索引
  6. 不影响主备,主库上插入的数据,备库也可以查到
  7. show tables 看得到表

临时表

  1. 创建的表的名字可以一样
  2. 表结构和数据都放在内存中
  3. 会话消失表结构和数据都消失
  4. 可以创建索引,删除索引
  5. 主库创建的表,备库查不到,
  6. show tables 看不到表

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

使用注意:

  1. 内存表需要自己delete数据或者drop表;需要drop权限,这点比较危险
  2. 内存表的表结构是保存在磁盘上的,如果多个session使用同一个表名,会存在冲突;如果不需要使用表名,如果使用一次都需要创建表结构,到时候会有很多小文件存在,不利于db的维护,dba清理表也有风险;

基于以上不适合用内存表

  1. 临时表是会话级别的,即使多个session创建的表名一样,都相互不影响
  2. 会话消失,所有的都消失,这点很不利于应用排查问题