MySQL之儲存引擎

2021-10-22 04:34:11 字數 3292 閱讀 4560

儲存引擎就是儲存資料、建立索引、更新資料以及查詢資料等技術的實現方式。儲存引擎是基於表的,而不是基於庫的,所以儲存引擎也可被稱為表型別。

oracle和sqlserver資料庫只有一種儲存引擎,mysql提供了外掛程式式的儲存引擎結果。所以mysql存在多種儲存引擎,可以根據需要使用相應的儲存引擎。mysql5.5之後的預設儲存引擎是innodb,有關mysql的儲存引擎如下圖所示:

使用命令show engines;

使用show variables like 『%storage_engine%』;顯示儲存引擎的資訊

對幾種常用的儲存引擎進行對比,重點掌握innodb和myisam如下圖所示:

1 innodb儲存引擎

(1)事務控制

innodb儲存引擎提供了具有事務提交、回滾、崩潰恢復能力的事務安全。但相對於myisam而言,innodb寫的效率會差一些,並且會占用更多的磁碟空間以保留資料和索引。

① 建立表

create table goods_innodb

( id int not null auto_increment,

name varchar(20

) not null,

primary key

(id)

)engine=innodb default charset=utf-8;

② 開啟事務並運算元據庫,後提交

start transaction;

insert goods_innodb

(id,name)

values

(null,

'meta20');

commit;

未提交事務發現插入失敗,提交後則插入成功,測試後發現innodb儲存引擎是支援事務的。

(2)外來鍵約束

mysql支援外來鍵的儲存引擎只有innodb,在建立外來鍵的時候,要求父表必須有對應的索引,子表在建立外來鍵的時候,也會自動的建立對應的索引。

① 建立父表,country_id為主鍵索引

create table country_innodb

( country_id int not null auto_increment,

country_name varchar(20

) not null,

primary key

(country_id)

)engine=innodb default charset=utf-8;

② 建立子表city_innodb,country_id為外來鍵,對應country_innodb的主鍵country_id

create table city_innodb

( city_id int not null auto_increment,

city_name varchar(20

) not null,

primary key

(city_id)

, key idx_fk_country_id

(country_id)

, constraint 'fk_city_country' foreign key

(country_id)references country_innodb

(country_id)on delete restrict on update cascade

)engine=innodb default charset=utf-8;

③ 插入資料

insert into country_innodb values

(null,

'china'),

(null,

'japan'),

(null,

'america');

insert into city_innodb values

(null,

'xian',1

),(null,

'newwork',3

),(null,

'beijin',1

);

在建立索引時,可以指定在刪除、更新父表時,對子表進行相應操作,包括restrict,cascade,set null和 no action.

(1)restrict和no action相同,指在子表有關聯記錄下,父表不能更新

(2)cascade表示父表在更新或刪除時,子表也更新或刪除對應的記錄

(3)set null 表示父表在更新或刪除時,子表對應的字段被set null

測試截圖如下:

(1)刪除

(2)更新

2 myisam儲存引擎

(1)不支援事務

myisam不支援事務,也不支援外來鍵,優勢是訪問速度快,對事務沒有要求的可以設定成該引擎。

① 建立表

create table goods_myisam

( id int not null auto_increment,

name varchar(20

) not null,

primary key

(id)

)engine=myisam default charset=utf-8;

② 開啟事務並運算元據庫,不提交

start transaction;

insert goods_innodb

(id,name)

values

(null,

'meta20'

);

經過測試發現未提交事務也插入成功,所以myisam不支援事務。

(1)innodb:mysql的預設儲存引擎,用於事務處理應用程式,支援外來鍵。如果對事務的完整性有較高的要求,在併發條件下要求資料的一致性,除了插入和查詢外還包含很多的更新和刪除操作,選擇innodb比較合適。

(2)myisam:應用以讀操作和插入操作為主,進行少量的更新和刪除操作,並且對事務的完整性和併發性要求不高,選擇myisam合適。

(3)memory:將所有的資料儲存在arm中,快速定位記錄和其他類似資料環境下,它的缺陷是對錶的大小有限制,太大的表無法快取在記憶體中,它通常用於更新不頻繁的小表,擁有快速得到訪問結果。

Mysql 儲存引擎之 MyISAM儲存引擎

myisam是預設儲存引擎。每個myisam在磁碟上儲存成三個檔案。frm檔案儲存表定義 myd檔案儲存資料 myi檔案儲存索引。要明確表示你想要用乙個myisam 請用engine表選項指出來 create table test myisam id int engine myisam 2 如下是m...

MySQL之儲存引擎

這幾天研習mysql資料庫的儲存引擎,以便能更深層次的掌握mysql這個優秀的資料庫。首先,mysql資料庫獨有的外掛程式式儲存引擎架構使得它有別於其他任何資料庫,其中不同的儲存引擎有著完全不同的功能和效能。mysql表儲存引擎主要有 innodb儲存引擎,myisam儲存引擎,ndb儲存引擎,me...

MySQL之儲存引擎

1.檢視某個資料表的命令 show create table tbl name mysql可以將資料以不同的技術儲存在檔案 記憶體 中,這種技術就稱為儲存引擎。每一種儲存引擎使用不同的儲存機制 索引技巧 鎖定水平,最終提供廣泛且不同的功能。mysql支援的儲存引擎有 myisam 適用於事物的處理不...