原創聲明:本文為作者原創,未經允許不得轉載,經授權轉載需注明作者和出處
記得在第十三章左聯,創建student表的時候說了句,字段class_i是當做一個外鍵,并不是一個真的外鍵。那么真的外鍵又是個啥?
外鍵屬于一種約束,限制你對數據庫的操作,它是為了防止因為操作不當產生冗余數據/臟數據的一種約束。刪掉幾個新增的class_id為3的數據,右鍵student表,選擇設計表。然后創建一個外鍵,將class_id設為一個外鍵:
然后保存。
然后,我們去class表刪除id為1的數據:
這時候刷新student表,你會發現,student表中的class_id為1的數據一起被刪除了:
我們可以找到,設置外鍵的時候,刪除時和新增時都有四個選項:
沒錯,造成student表中數據被刪除的就是刪除時的這個CASCADE。這四個選項是事件觸發限制,意思分別是:
以上是通過軟件來創建外鍵,如果通過語句,應該是這樣:
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的基礎到此結束了,還有啥索引什么的,以后遇到了講講。后面的內容不定期更新,也都是零散講一些技巧。