• 存储引擎介绍   Mysql中的数据用各种不同的技术存储在文件(或内存)中。这些技术中的每一个种技术都是用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,能够获得额外的速度或者功能,从而改善应用的整体功能。这些不同的技术以及配套的相关功能在Mysql中被称为存储引擎。最知名的存储引擎为 MyISAM 和 InnoDB。
  • MyISAM特点介绍   MyISAM是Mysql数据库系统5.5版本之前的默认存储引擎,他的前身是ISAM。ISAM是一个定义明确且历经时间考验的数据表格管理方法。它的读取操作速度很快,而且不占用大量内存和存储资源。

特点: 1)不支持事务 2)表级锁定形式,数据在更新时锁定整个表。 3)数据库读写过程中相互阻塞。 4)可以通过key_buffer_size来设置缓存索引 5)数据单独写入或读取 速度快占用资源少。 6)不支持外键约束,只支持全文索引。 7)在每个磁盘上存储成三个文件,文件名均以表的名字开始。 【 .frm文件存储表定义 | 数据文件的扩展名:.MYD(MYData) | 索引文件的扩展名:.MYI(MYIndex) 】

  • InnoDB特点介绍

1)支持事务,支持四个事务隔离级别。 2)行级锁定,但是全表扫描仍然会是表级锁定。 3)读写阻塞与事务隔离级别相关。 4)具有非常高效的缓存特性,能缓存索引,也能缓存数据。 5)表与主键以簇的方式存储。 6)支持分区、表空间,类似Oracle数据库。 7)支持外键约束。 Mysql5.5以前版本不支持全文索引,5.5版本以后支持。 8)适合对硬件资源要求比较高的场合。

  • MyISAM与InnoDB的区别   InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

  • 设置存储引擎及常用命令

  • 查看数据库可配置的存储引擎类型

     > show engines;
    
  • 查看正在使用的存储引擎

      > show table status from school where name='info';  
      或
      > use school;   
      > show create table info;
    
  • 配置存储引擎

  • 1)命令修改

      > use 库;      //进入数据库
      > alter table 表 engine=MyISAM;       //修改存储引擎为MyISAM
      > alter table 表 engine=InnoDB;   
    
  • 2)修改配置文件my.cnf

  • 修改默认指定引擎 仅对新建的表有效!

    # vim /etc/my.cnf
    ...
    [mysqld]
    default--storage-engine=MyISAM      //添加  或者=InnoDB
    
    3)创建表时直接指定
    > use 库;
    > create table 表名(id int)engine=InnoDB; 
    > create table 表名(id int)engine=MyISAM;
    > show create table 表;   查看
    
  • 4)批量修改引擎

  • mysql 5.5版本

    # yum -y install perl-DBI
    # yum -y install perl-DBD-MySQL        //安装perl对mysql的操作模版
    # mysql_convert_table_format --host=localhost --user=root --password=123456 --socket=/tmp/mysql.sock --engine=MyISAM 库名 表名1 表名2
    
    ========查找socket的位置 ==== 
    	 # yum install -y lsof                   
    	 # lsof | grep mysql | grep sock 
    ========================= 
    
    但是改成InnoDB 会报错需要修改下面配置文件
    # vim /usr/local/mysql/bin/mysql_convert_table_format
    	"e|engine|type=s"  => \$opt_engine,   //32行修改为engine,
    然后执行修改的命令
    # mysql_convert_table_format --host=localhost --user=root --password=123456 --socket=/tmp/mysql.sock --engine=InnoDB 库名 表名1 表名2