mysql的create tablespace_MySQL的SQL语句 - 数据定义语句(15)- CREATE TABLESPACE 语句 (2)...

接上篇

说明

● MySQL表空间命名时,斜杠字符("/")是不允许的,也不能使用以 innodb_ 开头的名称,因为这个前缀是保留给系统使用的。

● 不支持创建临时共享表空间。

● 共享表空间不支持临时表。

● TABLESPACE 选项可以与 CREATE TABLE 或 ALTER TABLE 一起使用,将 InnoDB 表分区或子分区分配给独立表空间。所有分区必须属于同一存储引擎。不支持为共享的 InnoDB 表空间分配表分区。共享表空间包括 InnoDB 系统表空间和通用表空间。

● 通用表空间支持使用 CREATE TABLE ... TABLESPACE 添加任何行格式的表。不需要启用 innodb_file_per_table。

● innodb_strict_mode 不适用于通用表空间。表空间管理规则独立于 innodb_strict_mode 严格执行。如果 CREATE TABLESPACE 参数不正确或不兼容,无论 innodb_strict_mode 设置如何,操作都会失败。当使用 CREATE TABLE ... TABLESPACE 或 ALTER TABLE ... TABLESPACE 将一个表添加到一个通用表空间时,innodb_strict_mode 被忽略,语句会按照 innodb_strict_mode 被启用的情况处理。

● 使用 DROP TABLESPACE 删除表空间。在删除表空间之前,必须使用 DROP TABLE 语句从表空间中删除所有表。在删除 NDB Cluster 表空间之前,必须使用一个或多个 ALTER TABLESPACE ... DROP DATATFILE 语句删除它的所有数据文件。

● 添加到 InnoDB 通用表空间的所有 InnoDB 表的各个部分都驻留在通用表空间中,包括索引和 BLOB 页。

对于分配到表空间的 NDB 表,只有那些没有建立索引的列存储在磁盘上,实际上使用表空间数据文件。所有 NDB 表的索引和索引列总是保存在内存中。

● 与系统表空间类似,截断或删除存储在通用表空间中的表,会在通用表空间.ibd数据文件内部创建空闲空间,该空间只能用于新的InnoDB数据。空间不会像独立表空间那样释放回操作系统。

● 通用表空间不与任何数据库或模式相关联。

● 通用表空间的表不支持 ALTER TABLE ... DISCARD TABLESPACE 和 ALTER TABLE ...IMPORT TABLESPACE 语句。

● 服务器对引用通用表空间的 DDL 使用表空间级元数据锁定。相比之下,服务器对引用独立表空间的 DDL 使用表级元数据锁定。

● 不能将生成的或现有的表空间更改为通用表空间。

● 通用表空间名称和独立表空间名称之间不存在冲突。出现在独立表空间名称中的“/”字符,在通用表空间名称中是不允许的。

● mysqldump 和 mysqlpump 不转储 InnoDB CREATE TABLESPACE 语句。

InnoDB 示例

这个示例演示了如何创建一个通用表空间,并添加三个不同行格式的未压缩表。

1. mysql> CREATE TABLESPACE `ts1` ADD DATAFILE ‘ts1.ibd‘ ENGINE=INNODB;

2.

3. mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=REDUNDANT;

4.

5. mysql> CREATE TABLE t2 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=COMPACT;

6.

7. mysql> CREATE TABLE t3 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=DYNAMIC;

这个例子演示了如何创建一个通用表空间并添加一个压缩表。这个示例假设 innodb_page_size 的默认值为16K。FILE_BLOCK_SIZE 为8192要求压缩表的 KEY_BLOCK_SIZE 为8。

1. mysql> CREATE TABLESPACE `ts2` ADD DATAFILE ‘ts2.ibd‘ FILE_BLOCK_SIZE = 8192 Engine=InnoDB;

2.

3. mysql> CREATE TABLE t4 (c1 INT PRIMARY KEY) TABLESPACE ts2 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;

这个例子演示了在不指定 ADD DATAFILE 子句的情况下创建通用表空间,在MySQL 8.0.14中,ADD DATAFILE 子句是可选的。

mysql> CREATE TABLESPACE ts3 ENGINE=INNODB;

这个例子演示了如何创建一个 undo 表空间。

1. mysql> CREATE UNDO TABLESPACE undo_003 ADD DATAFILE ‘undo_003.ibu‘;

NDB 示例

假设希望使用名为 mydata-1.dat 的数据文件创建一个名为 myts 的 NDB Cluster Disk Data 表空间。NDB 表空间总是需要使用由一个或多个 undo 日志文件组成的日志文件组。对于本例,首先使用 CREATE LOGFILE GROUP 语句创建一个名为 mylg 的日志文件组,其中包含一个名为 myundo-1.dat 的 undo 日志文件,示例如下所示:

1. mysql> CREATE LOGFILE GROUP myg1

2. -> ADD UNDOFILE ‘myundo-1.dat‘

3. -> ENGINE=NDB;

4. Query OK, 0 rows affected (3.29 sec)

现在,可以使用以下语句创建前面描述的表空间:

1. mysql> CREATE TABLESPACE myts

2. -> ADD DATAFILE ‘mydata-1.dat‘

3. -> USE LOGFILE GROUP mylg

4. -> ENGINE=NDB;

5. Query OK, 0 rows affected (2.98 sec)

现在可以使用带有 TABLESPACE 和 STORAGE DISK 选项的 CREATE TABLE 语句创建磁盘数据表,如下所示:

1. mysql> CREATE TABLE mytable (

2. -> id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,

3. -> lname VARCHAR(50) NOT NULL,

4. -> fname VARCHAR(50) NOT NULL,

5. -> dob DATE NOT NULL,

6. -> joined DATE NOT NULL,

7. -> INDEX(last_name, first_name)

8. -> )

9. -> TABLESPACE myts STORAGE DISK

10. -> ENGINE=NDB;

11. Query OK, 0 rows affected (1.41 sec)

需要注意的是,实际上只有来自 mytable 的 dob 和 joined 列存储在磁盘上,因为 id、lname 和 fname 列都有索引。

如前所述,当 CREATE TABLESPACE 与 ENGINE [=] NDB 一起使用时,会在每个 NDB Cluster 数据节点上创建表空间和相关的数据文件。可以通过查询 INFORMATION_SCHEMA.FILES 表来验证数据文件是否已经创建,并获得关于它们的信息,如下所示:

1. mysql> SELECT FILE_NAME, FILE_TYPE, LOGFILE_GROUP_NAME, STATUS, EXTRA

2. -> FROM INFORMATION_SCHEMA.FILES

3. -> WHERE TABLESPACE_NAME = ‘myts‘;

4.

5. +--------------+------------+--------------------+--------+----------------+

6. | file_name | file_type | logfile_group_name | status | extra |

7. +--------------+------------+--------------------+--------+----------------+

8. | mydata-1.dat | DATAFILE | mylg | NORMAL | CLUSTER_NODE=5 |

9. | mydata-1.dat | DATAFILE | mylg | NORMAL | CLUSTER_NODE=6 |

10.| NULL | TABLESPACE | mylg | NORMAL | NULL |

11. +--------------+------------+--------------------+--------+----------------+

12. 3 rows in set (0.01 sec)

官方网址:

dev.mysql.com/doc/refman/8.0/en/create-tablespace.html

原文:https://blog.51cto.com/15023289/2560170

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值