Mysql存儲引擎 MyISAM和InnoDB
阿新 • • 發佈:2018-07-04
localhost 查看 -h orm oracle 事務處理 外鍵 tab 整體 存儲引擎介紹
Mysql中的數據用各種不同的技術存儲在文件(或內存)中。這些技術中的每一個種技術都是用不同的存儲機制、索引技巧、鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,能夠獲得額外的速度或者功能,從而改善應用的整體功能。這些不同的技術以及配套的相關功能在Mysql中被稱為存儲引擎。最知名的存儲引擎為 MyISAM 和 InnoDB。
設置存儲引擎及常用命令
配置存儲引擎
2)修改配置文件my.cnf
4)批量修改引擎
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;
修改默認指定引擎 僅對新建的表有效!
# 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 表; 查看
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