MySQL全局通用表的创建和删除(新手必看)
MySQL 支持创建全局通用表空间,全局表空间可以被所有数据库的表共享,而且相比于独享表空间,手动创建共享表空间可以节约元数据方面的内存。可以在创建表的时候指定该表属于哪个表空间,也可以对已有表进行表空间修改。
下面创建名为 dxy 的共享表空间,SQL 语句如下:
指定表空间,SQL 语句如下:
也可以通过 ALTER TABLE 语句指定表空间,SQL 语句如下:
如何删除创建的共享表空间呢?因为是共享表空间,所以不能直接通过 DROP TABLE tbname 来删除,也不能回收空间。当确定共享表空间的数据都没用并且依赖该表空间的表均已被删除时,可以通过 DROP TABLESPACE 来删除共享表空间,以释放空间。如果依赖该共享表空间的表存在,则删除就会失败。
首先,删除依赖该表空间的数据表,SQL 语句如下:
然后,删除表空间,SQL语句如下:
下面创建名为 dxy 的共享表空间,SQL 语句如下:
mysql> CREATE TABLESPACE dxy ADD datafile 'dxy.ibd' file_block_size=16k; Query OK, 0 rows affected (0.10 sec)
指定表空间,SQL 语句如下:
mysql> CREATE TABLE t1(id int,name varchar(10))engine = innodb default charset utf8mb4 tablespace dxy; Query OK, 0 rows affected (0.01 sec)
也可以通过 ALTER TABLE 语句指定表空间,SQL 语句如下:
mysql> alter table t1 tablespace dxy;
如何删除创建的共享表空间呢?因为是共享表空间,所以不能直接通过 DROP TABLE tbname 来删除,也不能回收空间。当确定共享表空间的数据都没用并且依赖该表空间的表均已被删除时,可以通过 DROP TABLESPACE 来删除共享表空间,以释放空间。如果依赖该共享表空间的表存在,则删除就会失败。
首先,删除依赖该表空间的数据表,SQL 语句如下:
mysql> DROP TABLE t1; Query OK, 0 rows affected (0.16 sec)
然后,删除表空间,SQL语句如下:
mysql> DROP TABLESPACE dxy; Query OK, 0 rows affected (0.01 sec)