在文件系统中,MySQL将每个数据库(也可以称之为schema)保存为数据目录下的一个子目录。创建表时,MySQL会在数据库子目录下创建一个和表同名的.frm文件保存表的定义。
可以使用SHOW TABLE STATUS命令(在MySQL5.0以后的版本中,也可以查询INFORMATION_SCHEMA中对应的表)显式表的相关信息。
例如:
1 | SHOW TABLE STATUS LIKE 'user' \G |
- name:表名
- Engine:表的存储引擎类型。在旧版本中,该列的名字叫Type,而不是Engine
- Row_format:行的格式。
- ROWS:表中的行数。对于MyISAM和其他的一些存储引擎,该值是精确的,但对于InnoDB该值是估计值。
- Avg_row_length:平均每行包含的字节数。
- Data_length:表数据的大小(以字节为单位)。
- Max_data_length:表数据的最大容量,该值和存储引擎有关。
- Index_length:索引的大小(以字节为单位)。
- Data_free:对于MyISAM表,表示已分配但目前没有使用的空间。这部书空间包括了之前删除的行,以及后续可以被INSERT利用到的空间。
- Auto_increment:下一个AUTO_INCREMENT的值。
- Create_time:表的创建时间。
- Update_time:表数据的最后修改时间。
- Check_time:使用CHECK TABLE命令或者myisamchk工具最后一次检查表的时间。
- Collation:表的默认字符集和字符列排序规则。
- Checksum:如果启动,保存的时候整个表的实时校验和。
- Create_options:创建表时指定的其他选项。
- Comment:该列包含了一些其他的额外信息。对于MyISAM表,保存的是表在创建时带的注释。对于InnoDB表,则保存的是InnoDB表空间的剩余空间信息。如果是一个视图,则该列包含“VIEW”的文本字样。
InnoDB
InnoDB采用MVCC来支持高并发,并且实现了四个标准的隔离级别。
MyISAM
在MySQL5.1及之前的版本,MyISAM是默认的存储引擎。MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务和行级锁,而且有一个毫无疑问的缺陷就是崩溃后无法安全恢复。