mysql_外鍵約束的要求以及創建步驟

外鍵約束的要求

  1. 父表和子表必須使用相同的儲存引擎,而且禁止使用臨時表

  2. 數據表的儲存引擎只能為InnoDB:

  3. 外鍵列(字段)和參照列必須具有相似的數據類型,其中數字的長度或是否有符號位必須相同,而字符類型的字段的長度則可以不同

  4. 外鍵列(字段)和參照列(即外鍵列在另一個表中對應的主鍵列)必須創建索引,如果外鍵不存在索引(即外鍵約束)的話,MySQL將自動給外鍵列自動創建索引(外鍵約束)

步驟

  1. 設置儲存引擎
   my.ini 設置儲存引擎
   default-storage-engine=INNODB
  1. 創建兩張數據表(例):
  CREATE TABLE provinces(
    id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    proName VARCHAR(20) NOT NULL
  );

SHOW CREATE TABLE provinces; // 查看數據表創建詳細信息

   CREATE TABLE users(
     id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
     userName VARCHAR(10) NOT NULL,
     pid SMALLINT UNSIGNED,
     FOREIGN KEY (pid) REFERENCES provinces(id)
   );

如果 外鍵字段和參照列字段數據類型不同,會報1005錯誤

外鍵約束的操作:

  1. CASCADE:從父表刪除或更新會自動刪除或更新子表中匹配的行

  2. SET NULL:從父表刪除或更新行,會設置子表中的外鍵列為NULL,但必須保證子表列沒有指定NOT NULL

  3. RESTRICT:拒絕對父表的刪除或更新操作(如果子表中有匹配的記錄,則不允許對父表對應候選鍵進行update/delete操作,這個是ANSI SQL-92標準,從mysql4.0.8開始支持)

  4. NO ACTION:標準SQL的關鍵字,在mysql中與RESTRICT相同

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容