老司机三级_天天干天天操天天爽_女人被爽到娇喘呻吟视频_久久国产精品99久久久大便 - 亚洲日本系列

20.外鍵

  • • 發表于 7年前
  • • 作者 大妖怪
  • • 11193 人瀏覽
  • • 1 條評論
  • • 最后編輯時間 7年前
  • • 來自 [技 術]

原創聲明:本文為作者原創,未經允許不得轉載,經授權轉載需注明作者和出處

記得在第十三章左聯,創建student表的時候說了句,字段class_i是當做一個外鍵,并不是一個真的外鍵。那么真的外鍵又是個啥?
外鍵屬于一種約束,限制你對數據庫的操作,它是為了防止因為操作不當產生冗余數據/臟數據的一種約束。刪掉幾個新增的class_id為3的數據,右鍵student表,選擇設計表。然后創建一個外鍵,將class_id設為一個外鍵:


然后保存。
然后,我們去class表刪除id為1的數據:

這時候刷新student表,你會發現,student表中的class_id為1的數據一起被刪除了:

我們可以找到,設置外鍵的時候,刪除時和新增時都有四個選項:

沒錯,造成student表中數據被刪除的就是刪除時的這個CASCADE。這四個選項是事件觸發限制,意思分別是:

  • CASCADE: 在父表上update/delete記錄時,同步update/delete掉子表的匹配記錄
  • SET NULL: 在父表上update/delete記錄時,將子表上匹配記錄的列設為null
  • NO ACTION: 如果子表中有匹配的記錄,則不允許對父表對應候選鍵進行update/delete操作
  • RESTRICT: 如果想要刪除父表的記錄時,而在子表中有關聯該父表的記錄,則不允許刪除父表中的記錄
  • 除了這四種,還有一個不選擇,不選默認是RESTRICT。

以上是通過軟件來創建外鍵,如果通過語句,應該是這樣:

CREATE TABLE student(
   id INT NOT NULL AUTO_INCREMENT,
   name VARCHAR(5) NOT NULL,
   gender VARCHAR(1) NOT NULL,
   stu_no VARCHAR(10) NOT NULL,
   class_id INT NOT NULL,
   PRIMARY KEY(id),
   FOREIGN KEY(class_id) REFERENCES class(id)
);

這句話是說引用class表的id字段到student表的class_id字段作為外鍵,查看外鍵,可以發現創建出來的外鍵刪除時和更新時都是默認的:

如果想要修改觸發限制可以這么做:

CREATE TABLE student(
   id INT NOT NULL AUTO_INCREMENT,
   name VARCHAR(5) NOT NULL,
   gender VARCHAR(1) NOT NULL,
   stu_no VARCHAR(10) NOT NULL,
   class_id INT NOT NULL,
   PRIMARY KEY(id),
   FOREIGN KEY(class_id) REFERENCES class(id) ON DELETE CASCADE ON UPDATE CASCADE
);

之所以把外鍵放到最后,是因為平時寫程序不太喜歡使用這種方式,用得非常少,我也不是太會,因為有時候覺得數據庫限制得太強了不太自由,相比之下我本人更喜歡在程序中維護數據的一致性。那個,對于外鍵這塊,我先干了,你們隨意。
emmm,mysql的基礎到此結束了,還有啥索引什么的,以后遇到了講講。后面的內容不定期更新,也都是零散講一些技巧。

分享到:
1條評論
Ctrl+Enter
作者

大妖怪

大妖怪

APP:1 帖子:76 回復:200 積分:7517

已加入社區[3226]天

夢里巷口,可有你倚門回首

作者詳情》
Top