# 第07章_InnoDB数据存储结构
# 1. 数据库的存储结构:页
# 页的大小
SHOW VARIABLES LIKE '%innodb_page_size%';
# 3. InnoDB行格式(或记录格式)
# 查看MySQL8的默认行格式
SELECT @@innodb_default_row_format;
# 查看具体表使用的行格式
USE dbtest1;
SHOW TABLES;
SHOW TABLE STATUS LIKE 'emp1';
# 在创建或修改表的语句中指定行格式
CREATE TABLE emp5(id INT,name VARCHAR(15)) ROW_FORMAT=COMPACT;
SHOW TABLE STATUS LIKE 'emp5';
SHOW TABLE STATUS LIKE 'emp2';
ALTER TABLE emp2 ROW_FORMAT=COMPACT;
SHOW TABLE STATUS LIKE 'emp2';
# 举例:分析Compact行记录的内部结构:
CREATE TABLE mytest(
col1 VARCHAR(10),
col2 VARCHAR(10),
col3 CHAR(10),
col4 VARCHAR(10)
)ENGINE=INNODB CHARSET=LATIN1 ROW_FORMAT=COMPACT;
INSERT INTO mytest
VALUES('a','bb','bb','ccc');
INSERT INTO mytest
VALUES('d','ee','ee','fff');
INSERT INTO mytest
VALUES('d',NULL,NULL,'fff');
# 行溢出
CREATE TABLE varchar_size_demo(
c VARCHAR(65535)
)CHARSET=ASCII ROW_FORMAT=COMPACT;
CREATE TABLE varchar_size_demo0(
c VARCHAR(65535)
);
CREATE TABLE varchar_size_demo(
c VARCHAR(65532) #65532 + 2字节的变长字段的长度 + 1NULL值标识
)CHARSET=ASCII ROW_FORMAT=COMPACT;
CREATE TABLE varchar_size_demo1(
c VARCHAR(65533) NOT NULL #65533 + 2字节的变长字段的长度
)CHARSET=ASCII ROW_FORMAT=COMPACT;
CREATE TABLE varchar_size_demo2(
c VARCHAR(65534) NOT NULL #65533 + 2字节的变长字段的长度
)CHARSET=ASCII ROW_FORMAT=COMPACT;
# 5.表空间
# 5.1 独立表空间
USE dbtest1;
SHOW TABLES;
CREATE TABLE temp(id INT,name VARCHAR(15));
SHOW ENGINES;
# 查看InnoDB的表空间类型
SHOW VARIABLES LIKE 'innodb_file_per_table';
ibd文件剖析Compact行格式
分析内容 略