數據庫--外鍵約束


1.約束

約束保證了數據的完整性和一致性。

約束分為表級約束和列級約束,針對一個字段的約束稱為列級約束,針對兩個及兩個以上的約束稱為表級約束。

3.約束類型包括

NOT NULL(非空約束)

PRIMARY KEY(主鍵約束)

UNIQUE KEY(唯一約束)

DEFAULT KEY(默認約束)

FOREIGN KEY(外鍵約束)

首先我來介紹一下外鍵約束的要求

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

2.數據表和參照表必須具有相似的數據類型。其中數字的長度或者是否有符號位必須相同;但是如果是字符的話,長度可以不同。

3.外鍵列和參照列必須創建索引,如果外鍵列不存在索引的話,MYSQL將自動創建索引。

這里我們插入一句話,如何編輯數據表的存儲引擎?

在mysql配置文件中

default-storage-engine=INNODB;

例子:

父表:

CREATE TABLE provinces(

 id  SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

pname  VARCHAR(20)  NOT NULL

)

 

子表:

CREATE TABLE users(

id SMALL UNSIGNED PRIMARY KEY AUTO_INCREMENT,

username  VARCHAR(20) NOT NULL;

pid  SMALLINT  UNSIGNED,

FOREIGN(pid) REFERRENCE provinces(id);

)

 

外鍵約束的參照操作

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

2.SET NULL:從父表刪除或者更新行,並設置子表中的外鍵列為null,如果使用了該選項,必須保證子表列沒有指定NOT NULL

3 .RESIRICT :拒絕父表的刪除或者更新操作

4.NOT NULL:標准SQL的關鍵字,在MYSQL中與RESIRCT相同。

再舉一個例子

父表:

CREATE TABLE provinces(

 id  SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

pname  VARCHAR(20)  NOT NULL

)

 

子表:

CREATE TABLE users(

id SMALL UNSIGNED PRIMARY KEY AUTO_INCREMENT,

username  VARCHAR(20) NOT NULL;

pid  SMALLINT  UNSIGNED,

FOREIGN(pid) REFERRENCE provinces(id) ON DELETE CASCADE;

)

這時如果刪除父表中的id是可以的,相應的建立外鍵時,對兩個表進行插值必須先完成父表,在來完成子表,看下面的操作:

INSERT provinces(pname) VALUES("A").

INSERT provinces(pname) VALUES("B")

INSERT provinces(pname) VALUES("C")

 

INSERT users(username,pid) VALUES("TOM",3);

INSERT users(username,pid) VALUES("john",2);

不能插入(1,2,3)之外的其他的數,因為provinces中的id值只有1,2,3

如果DELETE * FROM provinces WHERE id=3;

那么users中pid=3的也刪除了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM