mysql儲存引擎及建立外來鍵

2021-06-15 11:32:18 字數 2140 閱讀 2669

今天要建立個外來鍵,發現跟儲存引擎還有關係,順便了解了一下。

這裡只講幾種常用的儲存引擎

mysql常用的儲存引擎為myisam、innodb、memory、merge,其中innodb提供事務安全表,其他儲存引擎都是非事務安全表

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

innodb儲存方式為兩種:(1)使用共享表空間儲存;   (2)使用多表空間

1、各儲存引擎之間的區別

核心功能分為四類:支援的字段和資料型別、鎖定型別、索引和處理

(1)欄位和資料型別

雖然所有這些引擎都支援通用的資料型別,例如整型、實型和字元型等,但是,並不是所有的引擎都支援其它的字段型別,特別是blog(二進位製大物件)或者text文字型別。其它引擎也許僅支援有限的字元寬度和資料大小。這些侷限性可能直接影響到你可以儲存的資料,同時也可能會對你實施的搜尋的型別或者你對那些資訊建立的索引產生間接的影響。這些區別能夠影響你的應用程式的效能和功能,因為你必須要根據你要儲存的資料型別選擇對需要的儲存引擎的功能做出決策。

(2)鎖定

資料庫引擎中的鎖定功能決定了如何管理資訊的訪問和更新。當資料庫中的乙個物件為資訊更新鎖定了,在更新完成之前,其它處理不能修改這個資料(在某些情況下還不允許讀這種資料)。

鎖定不僅影響許多不同的應用程式如何更新資料庫中的資訊,而且還影響對那個資料的查詢。這是因為查詢可能要訪問正在被修改或者更新的資料。總的來說,這種延遲是很小的。大多數鎖定機制主要是為了防止多個處理更新同乙個資料。由於向資料中插入資訊和更新資訊這兩種情況都需要鎖定,你可以想象,多個應用程式使用同乙個資料庫可能會有很大的影響。

不同的儲存引擎在不同的物件級別支援鎖定,而且這些級別將影響可以同時訪問的資訊。得到支援的級別有三種:表鎖定、塊鎖定和行鎖定。支援最多的是表鎖定,這種鎖定是在myisam中提供的。在資料更新時,它鎖定了整個表。這就防止了許多應用程式同時更新乙個具體的表。這對應用很多的多使用者資料庫有很大的影響,因為它延遲了更新的過程。

頁級鎖定使用berkeley db引擎,並且根據上載的資訊頁(8kb)鎖定資料。當在資料庫的很多地方進行更新的時候,這種鎖定不會出現什麼問題。但是,由於增加幾行資訊就要鎖定資料結構的最後8kb,當需要增加大量的行,也別是大量的小型資料,就會帶來問題。

行級鎖定提供了最佳的並行訪問功能,乙個表中只有一行資料被鎖定。這就意味著很多應用程式能夠更新同乙個表中的不同行的資料,而不會引起鎖定的問題。只有innodb儲存引擎支援行級鎖定。---www.bianceng.cn

(3)建立索引

建立索引在搜尋和恢復資料庫中的資料的時候能夠顯著提高效能。不同的儲存引擎提供不同的製作索引的技術。有些技術也許會更適合你儲存的資料型別。

有些儲存引擎根本就不支援索引,其原因可能是它們使用基本表索引(如merge引擎)或者是因為資料儲存的方式不允許索引(例如federated或者blackhole引擎)。

(4)事務處理

事務處理功能通過提供在向表中更新和插入資訊期間的可靠性。這種可靠性是通過如下方法實現的,它允許你更新表中的資料,但僅當應用的應用程式的所有相關操作完全完成後才接受你對錶的更改。例如,在會計處理中每一筆會計分錄處理將包括對借方科目和貸方科目資料的更改,你需要要使用事務處理功能保證對借方科目和貸方科目的資料更改都順利完成,才接受所做的修改。如果任一項操作失敗了,你都可以取消這個事務處理,這些修改就不存在了。如果這個事務處理過程完成了,我們可以通過允許這個修改來確認這個操作

2、外來鍵的建立

首先在資料表下找到關係檢視

進去選擇你要建立的外來鍵

然後設定on delete、  on update 屬性

mysql建立外來鍵

建立外來鍵的前提 本表的列必須與外來鍵型別相同 外來鍵必須是外表主鍵 外來鍵作用 使兩張表形成關聯,外來鍵只能引用外表中的列的值!指定主鍵關鍵字 foyunmkreign key 列名 引用外來鍵關鍵字 references 外來鍵表名 外來鍵列名 事件觸發限制 on delete和on updat...

MySQL外來鍵約束建立及刪除

建立外來鍵定義 create table categories category id tinyint 3 unsigned not null auto increment,name varchar 30 not null,primary key category id engine innodb ...

mysql建立外來鍵案例 MySQL外來鍵例項

外來鍵例項 性別表create table gender gid int auto increment primary key not null,gender char 10 insert into gender gender values male female unknown 乙個表只能有乙個主...