• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • CREATE TABLE语句创建文件

    CREATE TABLE语句保留

    CREATE TABLE创建表时,原始语句(包括所有规范和表选项)由MySQL存储。该信息将保留,以便在您使用ALTER TABLE语句更改存储引擎,排序规则或其他设置时,保留指定的原始表选项。即使两个引擎支持的行格式不同,这也使您可以在InnoDBMyISAM表类型之间进行切换。

    由于保留了原始语句的文本,但是由于可以静默地重新配置某些值和选项,因此活动表定义(可通过DESCRIBE或使用进行访问SHOW TABLE STATUS)和表创建字符串(可通过进行访问SHOW CREATE TABLE)可能报告不同的值。

    对于InnoDB表,报告SHOW CREATE TABLECreate_optionsSHOW TABLE STATUS显示表使用的实际值ROW_FORMATKEY_BLOCK_SIZE属性。在先前的MySQL版本中,报告了这些属性的原始指定值。

    由CREATE TABLE创建的文件

    对于InnoDB在每个表文件表空间或常规表空间中创建的表,表数据和关联的索引存储在数据库目录中的.ibd文件中。当InnoDB在系统表空间中创建表,表数据和索引存储在 ibdata *文件表示系统表空间。该innodb_file_per_table选项控制默认情况下是在每表文件表空间中还是在系统表空间中创建表。该TABLESPACE选项可用于将表放置在每表文件表空间,常规表空间或系统表空间中,而不管innodb_file_per_table设置如何。

    对于MyISAM表,存储引擎创建数据和索引文件。因此,对于每个MyISAMtbl_name,都有两个磁盘文件。

    文件目的
    tbl_name.MYD资料档案
    tbl_name.MYI索引文件

    备用存储引擎,介绍了每个存储引擎创建的代表表的文件。如果表名包含特殊字符,则表文件的名称包含这些字符的编码版本,如“标识符与文件名的映射”所述。

    CREATE TEMPORARY TABLE语句

    您可以TEMPORARY在创建表时使用关键字。一个TEMPORARY表仅在当前会话中可见,并且在关闭会话时会自动删除。这意味着两个不同的会话可以使用相同的临时表名称,而不会彼此冲突或与现有TEMPORARY的具有相同名称的非表冲突。(在删除临时表之前,现有表一直处于隐藏状态。)

    InnoDB不支持压缩的临时表。当innodb_strict_mode启用(默认值),CREATE TEMPORARY TABLE如果返回错误ROW_FORMAT=COMPRESSEDKEY_BLOCK_SIZE指定的。如果innodb_strict_mode禁用此选项,则会发出警告,并使用非压缩的行格式创建临时表。该innodb_file_per-table选项不会影响InnoDB临时表的创建。

    CREATE TABLE导致隐式提交,除非与TEMPORARY关键字一起使用。请参见“START TRANSACTION,COMMIT和ROLLBACK语句”。

    TEMPORARY表与数据库(方案)的关系非常松散。删除数据库不会自动删除该数据库中TEMPORARY创建的任何表。

    要创建临时表,您必须具有CREATE TEMPORARY TABLES特权。会话创建临时表后,服务器将不再对该表执行任何特权检查。所述创建会话可以在桌子上进行任何操作,例如DROP TABLEINSERTUPDATE,或SELECT

    这种行为的一个暗示是,即使当前用户没有创建临时表的权限,会话也可以操纵其临时表。假设当前用户没有CREATE TEMPORARY TABLES特权,但是能够执行一个定义者上下文存储过程,该过程以拥有者的特权执行CREATE TEMPORARY TABLES并创建一个临时表。在执行过程时,会话将使用定义用户的特权。该过程返回后,有效特权将还原为当前用户的特权,该用户仍可以看到临时表并对其执行任何操作。

    您不能用于CREATE TEMPORY TABLE ... LIKE基于驻留在mysql表空间,InnoDB系统表空间(innodb_system)或常规表空间中的表的定义来创建空表。这种表的表空间定义包括TABLESPACE定义表所在表空间的属性,并且上述表空间不支持临时表。要基于此类表的定义创建临时表,请改用以下语法:

    CREATE TEMPORARY TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;
    
    注意

    自MySQL 8.0.13起,不再支持TABLESPACE = innodb_file_per_tableTABLESPACE = innodb_temporary带有的子句,CREATE TEMPORARY TABLE在将来的MySQL版本中将不再支持。