对于在独立表空间或者通用表空间中创建的 InnoDB 表,表数据和相关索引存储在数据库目录中的 .ibd 文件中。在系统表空间中创建 InnoDB 表时,表数据和索引存储在表示系统表空间的 ibdata* 文件中。默认情况下,innodb_file_per_table 选项控制是在独立表空间中还是在系统表空间中创建表。TABLESPACE 选项可用来控制将表放入独立表空间、通用表空间或系统表空间中,而不考虑 innodb_file_per_table 的设置。对于MyISAM表,存储引擎创建数据和索引文件。因此,对于每个 MyISAM 表 tbl_name,都有两个磁盘文件。CREATE TEMPORARY TABLE 语句创建表时可以使用 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 关键字一起使用。临时表与数据库(模式)的关系非常松散。删除数据库不会自动删除在该数据库中创建的任何临时表。要创建临时表,必须具有 CREATE TEMPORARY TABLES 权限。在会话中创建临时表后,服务器不再对该表执行进一步的权限检查。创建的会话可以对表执行任何操作,例如 DROP TABLE、INSERT、UPDATE 或 SELECT。此行为的一个含义是,即使当前用户没有创建临时表的特权,会话也可以操作其临时表。假设当前用户没有 CREATE TEMPORARY TABLES 权限,但是能够执行一个定义者上下文存储过程,该存储过程使用有 CREATE TEMPORARY TABLES 权限的用户权限创建临时表。当过程执行时,会话使用定义用户的特权。过程返回后,有效权限将恢复为当前用户的权限,当前用户仍然可以查看临时表并对其执行任何操作。不能基于 mysql 表空间,InnoDB 系统表空间(InnoDB_system)或共享表空间中的表定义,使用 CREATE TEMPORY TABLE ... LIKE 语句创建一个空表。此类表的表空间定义包含一个 TABLESPACE 属性,该属性定义表所在的表空间,上述表空间不支持临时表。要根据表的定义创建临时表,请改用以下语法:CREATE TEMPORARY TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;
复制
从MySQL 8.0.13开始,不推荐 CREATE TEMPORARY TABLE 语句使用 TABLESPACE = innodb_file_per_table 和 TABLESPACE = innodb_temporary 子句,这些使用方式都将在 MySQL 的未来版本中删除。使用 CREATE TABLE ... LIKE 语句基于另一个表的定义创建一个空表,包括原始表中定义的任何列属性和索引:CREATE TABLE new_tbl LIKE orig_tbl;
复制
新创建的表使用与原表相同的表存储格式。需要有原始表的 SELECT 权限。当 LOCK TABLES 语句生效时,不能执行CREATE TABLE 或 CREATE TABLE ... LIKE 语句。CREATE TABLE ... LIKE 执行与 CREATE TABLE 语句相同的检查。这意味着,如果当前SQL模式与创建原始表时有效的模式不同,则表定义可能会被视为对新模式无效,语句将失败。对于 CREATE TABLE ... LIKE 语句,目标表保留原始表中生成的列信息。对于 CREATE TABLE ... LIKE 语句,目标表保留原始表中的表达式默认值。对于 CREATE TABLE ... LIKE 语句,目标表保留原始表中的 CHECK 约束,只是生成了所有约束名。CREATE TABLE ... LIKE 不保留为原始表指定的任何 DATA DIRECTORY 或者 INDEX DIRECTORY 表选项,也不保留任何外键定义。如果原始表是 TEMPORARY 表,CREATE TABLE ... LIKE 不保留 TEMPORARY。若要创建 TEMPORARY 目标表,请使用 CREATE TEMPORARY TABLE ... LIKE 语句。在 mysql 表空间、InnoDB 系统表空间(InnoDB_system)或共享表空间中创建的表,在表定义中包含 TABLESPACE 属性,该属性定义表所在的表空间。CREATE TABLE ... LIKE 语句保留 TABLESPACE 属性并在定义的表空间中创建表,而不考虑 innodb_file_per_table 设置。要在基于表的定义创建空表时避免使用 TABLESPACE 属性,请改用以下语法:CREATE TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;
复制
CREATE TABLE ... LIKE 操作将所有 ENGINE_ATTRIBUTE 和 SECONDARY_ENGINE_ATTRIBUTE 值应用于新表。https://dev.mysql.com/doc/refman/8.0/en/create-table-files.htmlhttps://dev.mysql.com/doc/refman/8.0/en/create-temporary-table.htmlhttps://dev.mysql.com/doc/refman/8.0/en/create-table-like.html