临时表的分类
按照创建的方式不同,MySQL的临时表可以分为两种,一种是用户使用CREATE TEMPORARY TABLE创建的,称为外部临时表,一种是因UNION、ORDER BY、GROUP BY、DISTINCT等复杂SQL操作产生的,称为内部临时表。
临时表的创建
临时表的创建的语法格式与创建普通表的语法格式类似,不同的之处在于增加了关键字TEMPORARY,具体语法如下所示。
CREATE TEMPORARY TABLE 表名(列的定义...);
临时表的查看
由于临时表的特殊性,因此使用SHOW TABLES不会列出临时表,但是可以使用SHOW CREATE TABLE或DESC命令查看临时表结构的详细信息,这两条命令的语法格式如下所示。
SHOW CREATE TABLE 临时表名
DESC 临时表名
临时表的删除
默认情况下,虽然当你断开与数据库的连接后,临时表就会自动被销毁,但是用户也可以在当前MySQL会话中使用 DROP TABLE 命令来手动删除临时表,删除临时表的语法与删除普通表的语法相同,具体格式如下。
DROP [TEMPORARY] TABLE 临时表名
临时表在MySQL中虽然应用的场景很多,但是在使用的过程还应该注意以下的一些限制。
1) 临时表在 memory、myisam、merge或者innodb上使用,并且不支持mysql cluster(簇)。
2)一个临时表只能被创建它的会话访问,对其他线程不可见。
3) 临时表名可以与普通表相同,但此时使用show create table 语句,以及增删改查语句访问的都是临时表,直到临时表被释放同名的普通表才可见。
4) show tables语句不会列出临时表,在information_schema中也不存在临时表信息。
5) 不能使用rename来重命名临时表。但是可以alter table rename代替。
6) 可以复制临时表得到一个新的临时表。
7) 但在同一个query语句中,相同的临时表只能出现一次。
8) 相同临时表不能在存储函数中出现多次。