1

MySQL数据库引擎简介

1.1 ISAM(Indexed Sequential Access Method)

         ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错。如果你的硬盘崩溃了,那么数据文件就无法恢复。所以你必须经常备份你所有的数据。

1.2 MyISAM

         MyISAM是MySQL的ISAM拓展格式数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM一个重要缺陷就是不能在表损坏后恢复数据,且不支持事务。

说明:当我们使用mysql进行delete数据,delete完以后,发现空间文件ibd并没有减少,这是因为碎片空间的存在。利用未使用的空间,释放出来,并整理数据文件的碎片。(具体可以查阅资料)

1.3 InnoDB

        InnoDB数据库引擎都是造就MySQL灵活性的技术的直接产品,这项技术就是MySQL++API。在使用MySQL的时候,你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理,也不支持外键。尽管要比其他两个引擎慢很多,但是InnoDB包括了事务处理和外来键的支持,这两点都是前两个引擎所没有的。是现在的MySQL(5.5以上版本)常用版本默认引擎、

2

存储引擎管理

2.1查看数据库支持的存储引擎

show engines

mysql 列不能使用的列名 mysql列名可以用中文吗_mysql 列不能使用的列名

从查询结果中:

  • Engine参数指存储引擎名称;
  • Support参数说明MySQL是否支持该类型引擎;
  • Comment参数表示对该引擎的评论;
  • Transaction参数则表示该引擎是否支持事务处理
  • XA参数表示是否分布式交易处理的XA规范
  • Savepoints参数表示是否支持保存点。

2.2 查看当前数据库使用的存储引擎

show variables like '%engine%'

mysql 列不能使用的列名 mysql列名可以用中文吗_mysql列名可以用中文吗_02

2.3 查看数据库表所用的引擎

show create table table_name;

mysql 列不能使用的列名 mysql列名可以用中文吗_mysql列名可以用中文吗_03

2.4 创建表指定存储引擎

create table table_name (column_name column_type) engine = engine_name

mysql 列不能使用的列名 mysql列名可以用中文吗_mysql列名可以用中文吗_04

2.5 修改表的存储引擎

alert table table_name engine = engine_name

mysql 列不能使用的列名 mysql列名可以用中文吗_mysql 列不能使用的列名_05

3

InnoDB

2.1 InnoDB特点

  • InnoDB支持事务,对于每一条SQL语言都默认封装成事务,自动提交。这样会影响速度,所以最好把多条SQL语言放在begin transaciton和commit之间,组成一个事务。
  • InnoDBz支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败。
  • InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。
  • InnoDB不保存表的具体行数,执行select count(*) from table时需全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快。
  • InnoDB不支持全文索引,而MyISAM支持,查询效率上MyISAM要高一点。