通⽤表空间 - General Tablespace
1 通⽤表空间的作⽤和特性?
✅ 解答问题
-
通⽤表空间是使⽤ CREATE tablespace 语法创建的共享InnoDB表空间
-
通⽤表空间能够存储多个表的数据,与系统表空间类似也是共享表空间;
-
服务器运⾏时会把表空间元数据保存在内存中,在表的数量相同的情况下,通⽤表空间⽐独⽴表空间的数量更少,所以消耗的内存也就更少;
-
数据⽂件可以放置在数据⽬录或数据⽬录之外的其他位置,对于单独管理关键表⾮常有⽤;
-
⽀持所有的表格式和⾏格式的相关特性;
2 怎么创建通⽤表空间?
-
创建通⽤表空间可以使⽤ CREATE TABLESPACE 语法。
-
CREATE TABLESPACE tablespace_name [ADD DATAFILE ‘file_name’] [FILE_BLOCK_SIZE = [value] [ENGINE [=] engine_name]
2.1 创建通⽤表空间的⽰例
- ⽰例:在 data ⽬录下创建通⽤表空间
- ADD DATAFILE ⼦句在MySQL 8.0.14及以后的版本是可选的,之前是必需的。如果没有指定ADD DATAFILE ⼦句,则⾃动创建⼀个以 UUID 为⽂件名的表空间数据⽂件,通⽤表空间数据⽂件以 .ibd 为扩展名。
2.2 创建通⽤表空间时要注意什么?
- 可以在数据⽬录中创建通⽤表空间,也可以在数据⽬录之外创建通⽤表空间。为避免与隐式创建的独⽴表⽂件表空间冲突,不⽀持在data⽬录的⼦⽬录中创建通⽤表空间。当在数据⽬录之外创建通⽤表空间时,该⽬录必须存在,并且必须在创建表空间之前让InnoDB识别,要使⽤⾃定义的⽬录可以通过系统 innodb_directories 指定。 Innodb_directories 是⼀个只读启动选项,配置后需要重新启动服务器。
Innodb_directories
默认值是 NULL ,同时innodb_data_home_dir
,innodb_undo_directory
和 datadir 定义的⽬录会被附加到innodb_directories
参数值中,在InnoDB启动时会⾃动被识别(包括⼦⽬录),⼿动指定⽬录的⽅式,如下所⽰:
3 如何向通⽤表空间中添加表?
- ⽰例:向通⽤表空间中添加表,在创建表时使⽤
TABLESPACE
⼦句指定通⽤表空间即可
4 怎么删除通⽤表空间?
DROP TABLESPACE
语句⽤于删除⼀个InnoDB通⽤表空间,在删除通⽤表空间之前,必须将所有表从表空间中删除,如果表空间不为空,将返回错误。查询通⽤表空间中的表,可以使⽤下⾯的语句:
SELECT a.NAME AS space_name, b.NAME AS table_name FROM
INFORMATION_SCHEMA.INNODB_TABLESPACES a, INFORMATION_SCHEMA.INNODB_TABLES b
WHERE a.SPACE=b.SPACE AND a.NAME LIKE 'ts1';
- ⽰例:⼀个完整的通⽤表空间删除流程
5 使⽤通⽤表空间时要注意什么?
-
使⽤ TRUNCATE 或 DROP 语句截断或删除表时,通⽤表空间的空闲容量并不会释放,并且只能⽤于新的InnoDB表;
-
通⽤表空间不属于任何数据库,使⽤
DROP DATABASE
操作数据库和属于该数据库所有的表时,并不会删除通⽤表空间。 -
tablespace_name 表空间名区分⼤⼩写