臨時表是當連接沒有斷開時存在,一旦斷開就不會存在,臨時表的數據和結構都在內存中,可以做個測驗,你創建一個臨時表,但是到響應的數據目錄下並不會找到.frm文件
mysql> CREATE TEMPORARY TABLE tmp_table (
->
-> name VARCHAR(10) NOT NULL,
-> value INTEGER NOT NULL
->
-> ) ;
Query OK, 0 rows affected (0.38 sec)
查看表狀態
mysql> show CREATE TABLE tmp_table \G
*************************** 1. row ***************************
Table: tmp_table
Create Table: CREATE TEMPORARY TABLE `tmp_table` (
`name` varchar(10) NOT NULL,
`value` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
它和正常表沒有什麼區別,但是數據是存在內存中的,你在響應的數據目錄下找不到數據文件。
一旦斷開連接你再查該表就會消失。
和臨時表有點相似的是內存表,有的也稱堆表。
mysql> CREATE TABLE mem_table (
->
-> name VARCHAR(10) NOT NULL,
-> value INTEGER NOT NULL
->
-> ) TYPE = HEAP;
Query OK, 0 rows affected, 1 warning (0.01 sec)
查看表狀態
mysql> show CREATE TABLE mem_table \G
*************************** 1. row ***************************
Table: mem_table
Create Table: CREATE TEMPORARY TABLE `mem_table` (
`name` varchar(10) NOT NULL,
`value` int(11) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
你在數據目錄下回發現一個mem_table.frm文件,所以內存表的數據是放在磁盤上的,但是插入數據後發現磁盤上沒有數據文件,所以數據是在內存中的,因為采用的是memory 引擎。一旦down機數據將不存在。該表因為數據是在內存中,所以數據會很快。缺點是安全性。