临时表和内存表

首先,临时表只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间。因此在不同的连接中可以创建同名的临时表,并且操作属于本连接的临时表。创建临时表的语法与创建表语法类似,不同之处是增加关键字TEMPORARY。

1
CREATE TEMPORARY TABLE 表名 (…)

临时表

限制条件

临时表在memorymyisammerge或者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
3
mysql> 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;

MySQL基本命令

表状态

SHOW TABLE STATUS LIKE 't_b_poc_notice_line%';

删除进程

1
2
3
select * from information_schema.innodb_trx 

kill 3511909

查看表锁

show OPEN TABLES where In_use > 0;

查看进程号

show processlist;

删除进程

kill 1085850;

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×