文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  CREATE TEMPORARY TABLE 陳述式

15.1.20.2 CREATE TEMPORARY TABLE 陳述式

您可以在建立資料表時使用 TEMPORARY 關鍵字。 TEMPORARY 資料表僅在目前的連線階段中可見,並且在連線階段關閉時會自動刪除。這表示兩個不同的連線階段可以使用相同的暫時資料表名稱,而不會彼此衝突,也不會與現有的非 TEMPORARY 同名資料表衝突。(現有的資料表會被隱藏,直到暫時資料表被刪除為止。)

InnoDB 不支援壓縮的暫時資料表。當啟用 innodb_strict_mode(預設值)時,如果指定了 ROW_FORMAT=COMPRESSEDKEY_BLOCK_SIZECREATE TEMPORARY TABLE 會傳回錯誤。如果停用 innodb_strict_mode,則會發出警告,並且會使用未壓縮的列格式建立暫時資料表。innodb_file_per-table 選項不會影響 InnoDB 暫時資料表的建立。

除了與 TEMPORARY 關鍵字一起使用外,CREATE TABLE 會導致隱含的提交。請參閱 第 15.3.3 節,「導致隱含提交的陳述式」

TEMPORARY 資料表與資料庫(結構描述)之間的關聯性非常鬆散。刪除資料庫不會自動刪除在該資料庫中建立的任何 TEMPORARY 資料表。

若要建立暫時資料表,您必須擁有 CREATE TEMPORARY TABLES 權限。在連線階段建立暫時資料表之後,伺服器不會再對該資料表執行任何權限檢查。建立連線階段可以對該資料表執行任何操作,例如 DROP TABLEINSERTUPDATESELECT

此行為的一個含意是,即使目前使用者沒有建立暫時資料表的權限,連線階段也可以操作其暫時資料表。假設目前使用者沒有 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_tableTABLESPACE = innodb_temporary 子句;預計在未來的 MySQL 版本中會移除這些子句。