首先,临时表只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间。因此在不同的连接中可以创建同名的临时表,并且操作属于本连接的临时表。创建临时表的语法与创建表语法类似,不同之处是增加关键字TEMPORARY。1
CREATE TEMPORARY TABLE 表名 (…)
临时表
限制条件
临时表在memory
、myisam
、merge
或者innodb
上使用,并且不支持mysql cluster
。show tables
语句不会列出临时表,在information_schema
中也不存在临时表信息;show create table
可以查看临时表。
不能使用rename
来重命名临时表。但是可以alter table rename
代替。1
mysql>ALTER TABLE orig_name RENAME new_name;
可以复制临时表得到一个新的临时表。1
mysql>create temporary table new_table select * from old_table;
但在同一个query语句中,相同的临时表只能出现一次。
正确1
mysql> select * from temp_tb;
错误1
2
3mysql> select * from temp_tb, temp_tb as t;
ERROR 1137 (HY000): Can't reopen table: 'temp_tb'
同样相同临时表不能在存储函数中出现多次,如果在一个存储函数里,用不同的别名查找一个临时表多次,或者在这个存储函数里用不同的语句查找,都会出现这个错误。
但不同的临时表可以出现在同一个query语句中,如临时表temp_tb1, temp_tb2。1
Mysql> select * from temp_tb1, temp_tb2;
临时表可以手动删除。1
DROP TEMPORARY TABLE IF EXISTS temp_tb;