目录
1.临时表(外部临时表)
2.内存表(内部临时表)
1.临时表(外部临时表)
(1)临时表介绍
临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。
临时表擎类型:只能是:memory(heap)、myisam、merge、innodb ,不支持mysql cluster(簇)。
使用CREATE TEMPORARY TABLE / DROP TABLE 来创建/删除临时表
(2)临时表使用注意
show tables 不会列出临时表
在同一条sql中,不能关联2次相同的临时表,不然,就会报如下错误
临时表在建立连接时可见,关闭时会清除空间,删除临时表;
不能使用rename重命名临时表。但是,你可以alter table代替:只能使用alter table old_tp_table_name rename new_tp_table_name;
影响使用replication功能;
(3)样例
mysql> CREATE TEMPORARY TABLE SalesSummary (
-> product_name VARCHAR(50) NOT NULL
-> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
-> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
-> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
mysql> INSERT INTO SalesSummary
-> (product_name, total_sales, avg_unit_price, total_units_sold)
-> VALUES
-> ('cucumber', 100.25, 90, 2);
mysql> SELECT * FROM SalesSummary;
mysql> DROP TABLE SalesSummary;
mysql> SELECT * FROM SalesSummary;
2.内存表(内部临时表)
MySQL的内存表,表结构创建在磁盘上,数据存放在内存中,所以当MySQL启动着的时候,这个表是存在的,数据也是存在的,如果用户有查看这个表的权限,在所有会话里面,都可以访问这个内存表的数据;当MySQL重启后,数据消失,结构还存在。
内存表的创建:
CREATE TABLE test(
id int(10),
num int(10)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
查看是否创建成功:
show tables;
使用完内存表后,如果我们想释放掉占用掉的内存,可以有两种方法:
-- 删除数据
delete from test;
或者
-- 清空表
truncate table test;
再或者
-- 删除表
drop table test;
对于我们常用的功能来说,内存有以下特征:
1.对于varchar等变长类型,内存表使用固定的长度来存放;
2.内存表可以有非唯一键;
3.内存表不能包含BLOB或者TEXT列;
4.内存表支持AUTO_INCREMENT列;
5.内存表支持插入延迟,使读取优先;
6.非临时内存表和其它非内存表一样在所有客户端直接共享;
我们使用内存表的时候,需要注意以下几个方面:
1.服务器内存足够大;
2.我们创建的内存表和MySQL内部临时表有所不同:
内存表的数据存放在内存中,而内部临时表(我们的query语句产生的)在恰当的时候存放在内存中,当内部临时表变得很大时,MySQL会自动地把它转化为 在磁盘上存储的表,而我们创建的内存表,却不会自动转换。
3.当我们单独地delete from 某个内存表的时候,不会回收内存;只有当整个表被delete的时候,才会回收内存;
4.在MySQL的主从服务器上,内存表可以被复制