MySQL之存储引擎

发布时间:2021-06-08

MySQL之存储引擎

存储引擎的概念是MySQL的一个特性,可简单理解为表类型;每一个表都有一个存储引擎,可在创建时指定,也可之后使用ALTER TABLE语句修改,都是通过ENGINE关键字设置的;若创建时没有指定,则为默认存储引擎,默认存储引擎也可通过参数文件中default-table-type参数修改。

----查看当前默认存储引擎,默认为MyISAM

mysql> show variables like 'table_type';

----查看当前数据库支持的存储引擎

mysql> show engines \G;

从输出结果可看到支持多个存储引擎,下面介绍几个重要的存储引擎如下:

MyISAM

默认存储引擎,不支持事务、外键,但访问速度快,对事务完整性不要求,适合于以SELECT/INSERT为主的表;每个MyISAM物理上存储为3个文件,文件名与表名相同,扩展名分别为:.frm(存储表定义)、MYD(MYData存储数据)、MYI(MYIndex存储索引),其中数据文件和索引文件可以放置在不同目录,平衡I/O。 数据文件和索引文件的路径,需要在创建表时通过DATA DIRECTORY和INDEX DIRECTORY语句指定,需要绝对路径,且具有访问权限。

MySQL类型的表可能因各种原因损坏,可通过CHECK TABLE语句检查表的健康,使用REPAIR TABLE语句修改。

MySQL类型的表支持3中不同的存储格式,如下:

静态表:默认存储格式,字段长度固定,存储迅速,容易缓存,缺点是占用空间多。注意:字段存储按照

宽度定义补足空格,应用访问时去掉空格,若字段本身就带有空格,也会去掉,这点特别注意。 动态表:变长字段,记录不是固定长度,优点是占用空间少,但频繁的更新删除操作会产生碎片,需要定

期执行OPTIMIZE TABLE语句或myisamchk –r命令来改善,出现故障时难以恢复。

压缩表:由myisampack工具创建,每个记录单独压缩,访问开支小,占用空间小。

InnoDB

具有提交、回滚、崩溃恢复的事务安全,相对MySQL来说,写处理能力差些,且会占用较多磁盘空间以保留数据和索引。具有以下不同于其他引擎的特点:

(1)自动增长列

InnoDB表可定义自动增长列,若插入的值为0或空时,则实际插入的值为自动增长后的值;可通过ALTER table语句强制设置自动增长列的初始值,默认从1开始,该值保存在内存中,若数据库重启,则会丢失;可使用LAST_INSERT_ID()查询当前线程最后插入记录使用的值,若一次插入多条记录,则返回第一条记录使用的自动增长值。

对于InnoDB表,自动增长列必须是索引,或者是组合索引的第一列;对于MyISAM表,可以为组合索引的其他列,插入记录后,自动增长列是按照组合索引的前面几列进行排序后递增的。

(2)外键约束

只有InnoDB引擎支持外键约束;创建索引时,可指定删除、更新父表时,对子表的相应操作;RESTRICT/NO ACTION相同,是指限制在子表有关联记录的情况下父表不能更新;CASCADE表示父表在更新或删除时,更新或删除子表对应记录;SET NULL表示父表在更新或删除时,子表对应字段被SET NULL。

(3)存储格式

InnoDB存储表和索引有两种方式:

使用共享表空间存储――表结构保存在.frm文件中;数据和索引保存在innodb_data_home_dir和innodb_data_file_path定义的表空间中,可以为多个文件

使用多表空间存储――表结构仍然存储在.frm文件中,但每个表的数据和索引单独保存在.ibd中。若为分区表,则每个分区对应单独的.ibd文件,文件名为表名+分区名

MySQL之存储引擎.doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219