1. 程式人生 > >Mysql存儲引擎 MyISAM和InnoDB

Mysql存儲引擎 MyISAM和InnoDB

localhost 查看 -h orm oracle 事務處理 外鍵 tab 整體

  • 存儲引擎介紹
      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
  • Mysql存儲引擎 MyISAM和InnoDB