您可以在建立資料表時使用 TEMPORARY
關鍵字。 TEMPORARY
資料表僅在目前的連線階段中可見,並且在連線階段關閉時會自動刪除。這表示兩個不同的連線階段可以使用相同的暫時資料表名稱,而不會彼此衝突,也不會與現有的非 TEMPORARY
同名資料表衝突。(現有的資料表會被隱藏,直到暫時資料表被刪除為止。)
InnoDB
不支援壓縮的暫時資料表。當啟用 innodb_strict_mode
(預設值)時,如果指定了 ROW_FORMAT=COMPRESSED
或 KEY_BLOCK_SIZE
,CREATE TEMPORARY TABLE
會傳回錯誤。如果停用 innodb_strict_mode
,則會發出警告,並且會使用未壓縮的列格式建立暫時資料表。innodb_file_per-table
選項不會影響 InnoDB
暫時資料表的建立。
除了與 TEMPORARY
關鍵字一起使用外,CREATE TABLE
會導致隱含的提交。請參閱 第 15.3.3 節,「導致隱含提交的陳述式」。
TEMPORARY
資料表與資料庫(結構描述)之間的關聯性非常鬆散。刪除資料庫不會自動刪除在該資料庫中建立的任何 TEMPORARY
資料表。
若要建立暫時資料表,您必須擁有 CREATE TEMPORARY TABLES
權限。在連線階段建立暫時資料表之後,伺服器不會再對該資料表執行任何權限檢查。建立連線階段可以對該資料表執行任何操作,例如 DROP TABLE
、INSERT
、UPDATE
或 SELECT
。
此行為的一個含意是,即使目前使用者沒有建立暫時資料表的權限,連線階段也可以操作其暫時資料表。假設目前使用者沒有 CREATE TEMPORARY TABLES
權限,但能夠執行以擁有 CREATE TEMPORARY TABLES
權限的使用者權限執行的定義者內容預存程序,並且建立暫時資料表。在程序執行時,連線階段會使用定義使用者的權限。程序傳回後,有效的權限會還原為目前使用者的權限,目前使用者仍然可以看到暫時資料表並對其執行任何操作。
您無法使用 CREATE TEMPORARY TABLE ... LIKE
根據位於 mysql
表空間、InnoDB
系統表空間(innodb_system
)或一般表空間中的資料表定義來建立空白資料表。此類資料表的表空間定義包含一個 TABLESPACE
屬性,該屬性定義了資料表所在的表空間,而上述表空間不支援暫時資料表。若要根據此類資料表的定義建立暫時資料表,請改用以下語法:
CREATE TEMPORARY TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;
不建議在 CREATE TEMPORARY TABLE
中使用 TABLESPACE = innodb_file_per_table
和 TABLESPACE = innodb_temporary
子句;預計在未來的 MySQL 版本中會移除這些子句。