1. 程式人生 > >mysql基礎(三)存儲引擎和鎖

mysql基礎(三)存儲引擎和鎖

mysql

存儲引擎的概念:

關系型數據庫表是用於存儲和組織信息的數據結構,可以將表理解為由行和列組成的表格,各種各樣,不同的表結構意味著存儲不同類型的數據,在數據的處理上也會存在著差異,對於mysql來說,它提供了多種類型的存儲引擎,可以根據對數據處理的需求,選擇不同的存儲引擎,從而最大限度的利用mysql的性能


mysql常見的存儲引擎:(SHOW ENGINES; 查看mysql支持的存儲引擎)


InnoDB:mysql5.5以後默認使用的儲存引擎,是目前使用最為廣泛的存儲引擎

InnoDB的特性:

1、支持崩潰後安全恢復

2、InnoDB支持行級鎖和外鍵約束

3、支持事務

4、支持聚集索引和輔助索引

5、支持熱備份

6、支持行級鎖

7、特別適合處理多重並發的請求,基於MVCC實現


數據文件:

InnoDB數據存儲於表空間中:

兩種表空間的類型:

1、所有InnoDB表的數據和索引存在在一個文件中,表空間文件定義在data目錄下

數據文件名:ibdata1,ibdata2,...

默認使用這種表空間格式,但這種方式有很大缺陷,不建議使用


2、每個表使用一個獨立的表空間文件,存儲數據和索引

innodb_file_per_teble=ON #指定使用第二種表空間格式

使用獨立表空間文件,每增加一張表就會增加兩個數據文件

數據文件:

表名.ibd:用於存儲數據和索引

表名.frm:用於存儲表定義和屬性



MyISAM:mysql5.5以前默認使用的存儲引擎

MyISAM的特性:

1、支持全文索引,壓縮

2、不支持事務

3、只能支持表級鎖

4、不支持崩潰後安全恢復

5、支持溫備份

適用場景:讀多寫少的環境(如:讀寫分離中的從庫),且如果需要用到MyISAM可以考慮用Aria代替

Aria支持崩潰後安全恢復

MyISAM沒創建一個表和生成三個數據文件

數據文件:位於data目錄下

表名.frm:用於存儲表定義和屬性

表名.MYD:用於存儲數據

表名.MYI:用於存儲索引



BlackHole(黑洞引擎):

不實際存儲數據,一般只用於記錄二進制日誌文件,多用與級聯復制



Memory(基於內存的存儲引擎):

Memory存儲引擎,內存作為存儲介質。提高數據庫性能,但當mysqld崩潰時,所有的Memory數據都會丟失

使用場景:

1.目標數據較小,而且被非常頻繁地訪問

2.如果數據是臨時的,而且要求必須立即可用,那麽可以Memory存儲引擎

3.存儲在Memory表中的數據如果突然丟失,不會對線上服務產生負面影響



mysql鎖:

鎖的概念:

在數據庫中,數據是一種供許多用戶共享的資源。如何保證數據並發訪問的一致性、有效性是所有數據庫必須解決的一個問題,鎖沖突也是影響數據庫並發訪問性能的一個重要因素


鎖的級別:

表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定力度大,發生鎖沖突的概率最高,並發度最低

行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定力度小,發生鎖沖突的概率最低,並發度最高

mysql本身在數據庫級別實現了表級鎖,存儲引擎的鎖只有存儲引擎能夠調用,用戶無權操作


手動加鎖:

語法

LOCK TABLES tbl_name ock_type READ|WRITE #加鎖

UNLOCK TABLES #解鎖




本文出自 “自動化運維” 博客,請務必保留此出處http://hongchen99.blog.51cto.com/12534281/1932021

mysql基礎(三)存儲引擎和鎖