您可以在建立資料表時使用 TEMPORARY
關鍵字。 TEMPORARY
資料表僅在目前的工作階段中可見,並在工作階段關閉時自動捨棄。這表示兩個不同的工作階段可以使用相同的暫時資料表名稱,而不會彼此衝突,也不會與同名的現有非 TEMPORARY
資料表衝突。(現有資料表將被隱藏,直到暫時資料表被捨棄。)
InnoDB
不支援壓縮的暫時資料表。當 innodb_strict_mode
啟用時(預設情況下),如果指定了 ROW_FORMAT=COMPRESSED
或 KEY_BLOCK_SIZE
,則 CREATE TEMPORARY TABLE
會傳回錯誤。如果 innodb_strict_mode
停用,則會發出警告,並使用未壓縮的列格式建立暫時資料表。innodb_file_per-table
選項不影響 InnoDB
暫時資料表的建立。
CREATE TABLE
會導致隱式提交,除非與 TEMPORARY
關鍵字一起使用。請參閱 第 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 中移除它。