MySQL的儲存引擎

2021-07-02 02:56:16 字數 4328 閱讀 4559

mysql5.0支援的儲存引擎包括myisam,innodb,memory,merge, bdb, example,ndb cluster,archive, csv, blackhole,federated

myisam型別的表可能會損壞,損壞後的表不能被訪問,會提示需要修復或者訪問後返回錯誤的結果。

myisam型別的表提供修復的工具,可以用check table檢查是否損壞,repair table鞋服乙個損壞的myisam表。

myisam支援3種不同的儲存格式:

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

create table country(

country_id smallint unsigned not null auto_increment,

country varchar(50) not null,

last_update timestamp not null default current_timestamp on update current_timestamp,

primary key (country_id)

)engine=innodb default charset=utf8;

create table city(

city_id smallint unsigned not null auto_increment,

city varchar(50) not null,

country_id smallint unsigned not null,

last_update timestamp not null default current_timestamp on update current_timestamp,

primary key (city_id),

key idx_fk_country_id (country_id),

constraint 'fk_city_country' foreign key (country_id) references country (country_id) on delete restrict on update cascade

)engine=innodb default charset=utf8;

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

其中,restrict和no action 相同,是指限制在子表有關聯記錄的情況下父表不能更新;

cascade表示父表在更新或者刪除時,更新或者刪除子表對應記錄;

set null則表示父表在更新或者刪除的時候,子表的對應欄位被set null。

選擇後兩種方式時要謹慎,因為可能錯誤的操作導致資料的丟失

當某個表被其他表建立了外來鍵參照,呢麼該錶的對應索引或者主鍵禁止被刪除。

匯入多個表的資料時,如要忽略表之前的匯入順序,或者在執行load data和alter table操作時,可以暫時關閉外來鍵約束來加快處理速度。

關閉命令:set foreign_key_checks=0;

還原:set foreign_key_checks=1;

對於innodb的表,外來鍵資訊通過使用show create table或者show table status命令都能實現

如:show table status like 『city』\g

memory儲存引擎使用存在於記憶體中的內容來建立表。每個memory表只實際對應乙個磁碟檔案,格式是 .frm

memory型別的表訪問非常的快,因為資料是存放在記憶體中的,並且預設使用hash索引,但是一旦服務關閉,表中的資料就會丟失掉。

create

table tab_memory engine=memory

select city_id,city,country_id

from city group

by city_id;

給memory表建立索引的時候,可以指定使用hash索引還是btree索引:

create index mem_hash using hash on tab_memory (city_id);

show index from tab_memory \g;//顯示索引資訊

當不再需要memory表的內容之時,要釋放被memory表使用的記憶體,應該執行delete from 或truncate table,或者整個的刪除表(drop table)

memory型別的儲存引擎主要用於那些內容變化不頻繁的**表,或者作為統計操作的中間結果表,便於高效的對中間結果進行分析並得到最終統計結果。

對memory引擎的表進行更新要謹慎,因為資料並沒有實際寫到磁碟中,所以一定要對下次重新啟動服務後如何獲得這些修改後的資料有所考慮。

merge是一組myisam表的組合,這些myisam表結構完全相同,merge表本身並沒有資料,對merge型別的表進行的查詢,更新,刪除操作,這些操作實際上是對內部的myisam表進行的。對merge型別的表插入操作,是通過insert_method子句定義插入的表,可以有3個不同的值,使用first或last值使得插入操作被相應的作用在第一或最後乙個表上,不定義這個子句或者定義為no,表示不能對這個merge表執行插入操作。

可以對merge表進行drop操作,這個操作只刪除merge的定義,對內部的表沒有任何影響

merge表在磁碟上保留兩個檔案,檔名以表的名字開始

create

table payment_2006(

country_id smallint,

payment_date datetime,

amount decimal(15,2),

key idx_fk_country_id(country_id)

)engine=myisam;

create

table payment_2007(

country_id smallint,

payment_date datetime,

amount decimal(15,2),

key idx_fk_country_id(country_id)

)engine=myisam;

create

table payment_all(

country_id smallint,

payment_date datetime,

amount decimal(15,2),

index(country_id)

)engine=merge

union=(payment_2006,payment_2007) insert_method=last;

//分別向payment_2006和payment_2007表中插入測試資料:

insert

into payment_2006 values(1,'2006-05-01',100000),(2,'2006-08-15',150000);

insert

into payment_2007 values(1,'2007-02-20',350000),(2,'2007-07-15',220000);

//檢視3個表裡的記錄

//向payment_all中插入一條記錄,由於payment_all定義的是insert_method=last,就會向最後乙個表中插入記錄(payment_2007)

insert

into payment_all values(3,'2006-03-31',112200);

這是merge表和分割槽表的區別,merge表並不能智慧型的將記錄寫到對應的表中,而分割槽表是可以的。

通常我們使用merge表來透明的對多個表進行查詢和更新,而對這種按照時間記錄的操作日誌則可以透明的進行插入操作。

mysql的儲存引擎有 mysql儲存引擎有哪些?

儲存引擎是資料庫管理系統用來從資料庫建立 讀取和更新資料的軟體模組。mysql中有兩種型別的儲存引擎 事務型和非事務型。對於mysql 5.5及更高版本,預設的儲存引擎是innodb。在5.5版本之前,mysql的預設儲存引擎是myisam。那麼mysql儲存引擎有哪些?一 innodb 這是mys...

mysql儲存引擎 mysql儲存引擎簡介

精品推薦 什麼是儲存引擎 mysql儲存引擎是資料庫如何儲存資料 怎樣建立索引以及如何查詢更新資料等技術的實現方法,資料通過使用不同的技術儲存在檔案中,使用不同的儲存機制 索引方式來提供不同的功能。在mysql這種關係型資料中心來說,資料是以表的方式來儲存的,因此,簡單點來說,儲存引擎就是儲存和操作...

mysql個儲存引擎 MySQL儲存引擎

mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 儲存引擎 其實就是指定表如何儲存資料,如何為儲存的資料建立索引以及如何更新 查詢資料等技術實現的方法...