MySQL進階(一)主外鍵講解

1.什么是外鍵:

? ? ? 主鍵:是唯一標識一條記錄,不能有重復的,不允許為空,用來保證數據完整性

? ? ??外鍵:是另一表的主鍵,?外鍵可以有重復的,?可以是空值,用來和其他表建立聯系用的。所以說,如果談到了外鍵,一定是至少涉及到兩張表。例如下面這兩張表:

MySQL進階(一)主外鍵講解

上面有兩張表:部門表(dept)、員工表(emp)。Id=Dept_id,而Dept_id就是員工表中的外鍵:因為員工表中的員工需要知道自己屬于哪個部門,就可以通過外鍵Dept_id找到對應的部門,然后才能找到部門表里的各種字段信息,從而讓二者相關聯。所以說,外鍵一定是在從表中創建,從而找到與主表之間的聯系;從表負責維護二者之間的關系。

2.外鍵的使用需要滿足下列的條件:(這里涉及到了InnoDB的概念)

? ? ?1.?兩張表必須都是InnoDB表,并且它們沒有臨時表。

? ? ? 注:InnoDB是數據庫的引擎。MySQL常見引擎有兩種:InnoDB和MyISAM,后者不支持外鍵。

? ? ? 2.?建立外鍵關系的對應列必須具有相似的InnoDB內部數據類型。

? ? ? 3.?建立外鍵關系的對應列必須建立了索引。

? ? ? 4.?假如顯式的給出了CONSTRAINT?symbol,那symbol在數據庫中必須是唯一的。假如沒有顯式的給出,InnoDB會自動的創建。

面試題:你的數據庫用什么存儲引擎?區別是?

? ? ? 答案:常見的有MyISAM和InnoDB。

? ? ? MyISAM:不支持外鍵約束。不支持事務。對數據大批量導入時,它會邊插入數據邊建索引,所以為了提高執行效率,應該先禁用索引,在完全導入后再開啟索引。

? ? ? InnoDB:支持外鍵約束,支持事務。對索引都是單獨處理的,無需引用索引。

? ? ? CONSTRAINT?symbol:可以給這個外鍵約束起一個名字,有了名字,以后找到它就很方便了。如果不加此參數的話,系統會自動分配一個名字。

? ? ? FOREIGN?KEY:將從表中的字段1作為外鍵的字段。

? ? ? REFERENCES:映射到主表的字段2。

? ? ? ON?DELETE后面的四個參數:代表的是當刪除主表的記錄時,所做的約定。

? ? ? ? ? ?RESTRICT(限制):如果你想刪除的那個主表,它的下面有對應從表的記錄,此主表將無法刪除。

? ? ? ? ? ?CASCADE(級聯):如果主表的記錄刪掉,則從表中相關聯的記錄都將被刪掉。

? ? ? ? ? ?SET?NULL:將外鍵設置為空。

? ? ? ? ? ?NO?ACTION:什么都不做。

? ? ?注:一般是RESTRICT和CASCADE用的最多。

美文美圖

MySQL進階(一)主外鍵講解

以上就是?MySQL進階(一)主外鍵講解的內容,更多相關內容請關注PHP中文網(www.php.cn)!

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享