久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql支持外鍵嗎

134次閱讀
沒有評論

共計 3893 個字符,預計需要花費 10 分鐘才能閱讀完成。

本篇內容主要講解“mysql 支持外鍵嗎”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“mysql 支持外鍵嗎”吧!

mysql 支持外鍵。在 MySQL 中,外鍵主要用來建立主表與從表的關聯關系,可以為兩個表的數據建立連接,約束兩個表中數據的一致性和完整性;當主表刪除某條記錄時,從表中與之對應的記錄也必須有相應的改變。一個表可以有一個或多個外鍵,外鍵可以為空值,若不為空值,則每一個外鍵的值必須等于主表中主鍵的某個值;且外鍵中列的數目和對應數據類型必須和主表的主鍵中的相同。

本教程操作環境:windows7 系統、mysql8 版本、Dell G3 電腦。

mysql 支持外鍵。

MySQL 外鍵(FOREIGN KEY)

外鍵是指定表中與另一個表的另一個字段匹配的字段。外鍵對相關表中的數據設置了約束,這使 MySQL 能夠保持參照完整性。

外鍵用來建立主表與從表的關聯關系,為兩個表的數據建立連接,約束兩個表中數據的一致性和完整性。

對于兩個具有關聯關系的表而言,相關聯字段中主鍵所在的表就是主表(父表),外鍵所在的表就是從表(子表)。

主表刪除某條記錄時,從表中與之對應的記錄也必須有相應的改變。一個表可以有一個或多個外鍵,外鍵可以為空值,若不為空值,則每一個外鍵的值必須等于主表中主鍵的某個值。

我們來看看示例數據庫中的以下數據庫圖。

我們有兩個表:customers 和 orders,每個客戶都有零個或多個訂單,每個訂單只能屬于一個客戶。customers 表和 orders 表之間的關系是一對多的,它 orders 由 customerNumber 字段指定的表中的外鍵建立。customers 表中的 customerNumber 字段與 orders 表中的 customerNumber 主鍵字段相關。

customers 表稱為父表或引用表,orders 表稱為子表或引用表。

外鍵可以是一個列或一組列。子表中的列通常引用父表中的主鍵列。

表可以具有多個外鍵,子表中的每個外鍵可以引用不同的父表。

子表中的行必須包含父表中存在的值,例如,orders 表中的每個訂單記錄必須具有 customers 表 customerNumber 中存在的值。因此,多個訂單可以引用同一個客戶,這種關系稱為一個(客戶)到多個(訂單)或一對多。

有時,子表和父表是相同的。外鍵引用表的主鍵,例如,下 employees 表:

reportTo 列是一個外鍵,它引用 employeeNumber 作為 employees 表的主鍵的列,以反映員工之間的匯報結構,即每個員工向另一個員工匯報,員工可以有零個或多個直接匯報。我們有一個關于自聯接教程可以幫助您根據這種表查詢數據。

reportTo 外鍵也被稱為遞歸或自引用的外鍵。

外鍵強制執行引用完整性,可幫助您自動維護數據的一致性和完整性。例如,您無法為不存在的客戶創建訂單。

此外,您可以 customerNumber 在外鍵的刪除操作上設置級聯,以便在刪除 customers 表中的客戶時,也會刪除與客戶關聯的所有訂單。這節省了使用多個 DELETE 語句 或 DELETE JOIN 語句的時間和精力。

與刪除相同,您還可以在更新操作上為 customerNumber 外鍵定義級聯,以便在不使用多個 UPDATE 語句或 UPDATE JOIN 語句的情況下執行跨表更新。

注意:在 MySQL 中,InnoDB 存儲引擎支持外鍵,因此您必須創建 InnoDB 表才能使用外鍵約束。

mysql 定義外鍵時,需要遵守下列規則:

主表必須已經存在于數據庫中,或者是當前正在創建的表。如果是后一種情況,則主表與從表是同一個表,這樣的表稱為自參照表,這種結構稱為自參照完整性。

必須為主表定義主鍵。

主鍵不能包含空值,但允許在外鍵中出現空值。也就是說,只要外鍵的每個非空值出現在指定的主鍵中,這個外鍵的內容就是正確的。

在主表的表名后面指定列名或列名的組合。這個列或列的組合必須是主表的主鍵或候選鍵。

外鍵中列的數目必須和主表的主鍵中列的數目相同。

外鍵中列的數據類型必須和主表主鍵中對應列的數據類型相同。

為表創建外鍵

MySQL 創建外鍵語法

以下語法說明如何在 CREATE TABLE 語句中的子表中定義外鍵。

CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name (columns)
REFERENCES parent_table(columns)
ON DELETE action
ON UPDATE action

讓我們更詳細地學習一下語法:

CONSTRAINT 子句允許您為外鍵約束定義約束名稱。如果省略它,MySQL 將自動生成一個名稱。

FOREIGN KEY 子句指定子表中引用父表中主鍵列的列。你可以把一個外鍵名稱放在 FOREIGN KEY 子句之后,或者讓 MySQL 為你創建一個名字。請注意,MySQL 會自動使用 foreign_key_name 名稱創建索引。

REFERENCES 子句指定子表中的列所引用的父表及列。在規定的子表和父表的列數 FOREIGN KEY 和 REFERENCES 必須相同。

ON DELETE 子句允許您定義刪除父表中的記錄時子表中記錄的內容。如果省略 ON DELETE 子句并刪除父表中包含子表中記錄的記錄,MySQL 將拒絕刪除。此外,MySQL 還為您提供操作,以便您可以使用其他選項,例如 ON DELETE CASCADE  ,要求 MySQL 刪除子表中的記錄,當父表中的記錄被刪除時,記錄將引用父表中的記錄。如果您不希望刪除子表中的相關記錄,請改用 ON DELETE SET NULL 操作。MySQL 會將子表中的外鍵列值設置為 NULL 刪除父表中的記錄時,條件是子表中的外鍵列必須接受 NULL 值。請注意,如果您使用 ON DELETE NO ACTION 或 ON DELETE RESTRICT 操作,MySQL 將拒絕刪除。

ON UPDATE 子句使您可以指定更新父表中的行時子表中的行會發生什么。您可以省略 ON UPDATE 子句,以便在更新父表中的行時讓 MySQL 拒絕對子表中行的任何更新。ON UPDATE CASCADE 操作允許您執行跨表更新,并且當更新父表 ON UPDATE SET NULL 中的行時,操作會將子表中的行中的值重置為值 NULL。ON UPDATE NO ACTION 或 UPDATE RESTRICT 行動拒絕任何更新。

MySQL 創建表外鍵示例

下面的示例創建一個 dbdemo 數據庫和兩個表:categories 和  products. 每個類別具有一個或多個產品和每個產品只屬于一個類別。products 表中的 cat_id 字段被定義為帶有 UPDATE ON CASCADE 和 DELETE ON RESTRICT 操作的外鍵。

CREATE DATABASE IF NOT EXISTS dbdemo;
 
USE dbdemo;
 
CREATE TABLE categories(
 cat_id int not null auto_increment primary key,
 cat_name varchar(255) not null,
 cat_description text
) ENGINE=InnoDB;
 
CREATE TABLE products(
 prd_id int not null auto_increment primary key,
 prd_name varchar(355) not null,
 prd_price decimal,
 cat_id int not null,
 FOREIGN KEY fk_cat(cat_id)
 REFERENCES categories(cat_id)
 ON UPDATE CASCADE
 ON DELETE RESTRICT
)ENGINE=InnoDB;

將外鍵添加到表中

MySQL 添加外鍵語法

要將外鍵添加到現有表,請使用帶有上述外鍵定義語法的 ALTER TABLE 語句:

ALTER TABLE table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)
ON DELETE action
ON UPDATE action;

MySQL 添加外鍵示例

現在,讓我們添加一個名為 vendors 的新表,并更改 products 表以包含供應商 ID 字段:

USE dbdemo;
 
CREATE TABLE vendors(
 vdr_id int not null auto_increment primary key,
 vdr_name varchar(255)
)ENGINE=InnoDB;
 
ALTER TABLE products 
ADD COLUMN vdr_id int not null AFTER cat_id;

要向表中添加外鍵 products,請使用以下語句:

ALTER TABLE products
ADD FOREIGN KEY fk_vendor(vdr_id)
REFERENCES vendors(vdr_id)
ON DELETE NO ACTION
ON UPDATE CASCADE;

現在,products 表有兩個外鍵,一個引用 categories 表,另一個引用 vendors 表。

到此,相信大家對“mysql 支持外鍵嗎”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-13發表,共計3893字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 册亨县| 凤翔县| 焦作市| 静宁县| 西城区| 慈溪市| 大田县| 商河县| 吉林市| 沧州市| 龙门县| 安吉县| 大安市| 额尔古纳市| 澎湖县| 安阳市| 阿拉善盟| 霍林郭勒市| 布尔津县| 昔阳县| 甘洛县| 湟中县| 那曲县| 博客| 铜陵市| 合阳县| 崇信县| 永德县| 合作市| 屏东县| 嘉峪关市| 平塘县| 清原| 富源县| 梓潼县| 汝州市| 德令哈市| 五台县| 平阴县| 佳木斯市| 大洼县|