MySQL(一) 資料庫完整性約束

2021-09-24 13:45:33 字數 1513 閱讀 7953

提供定義完整性約束條件的機制

提供完整性檢查方法

違約處理

在建立表時(create table),使用primary key定義。

[例]:

create table student

(sno char(9) primary key

sname char(20) not null

s*** char(2)

sage smallint

sdept char(20)

)

create table student

(sno char(9)

sname char(20) not null

s*** char(2)

sage smallint

sdept char(20)

primary key (sno)

)

sno即為定義的主碼。

實體完整性有兩項自動檢查,

檢查主碼值是否唯一,如果不唯一則拒絕插入或修改

檢查主碼值是否為空,為空則拒絕插入或修改

為了方便檢查主碼會自動建立索引,索引的儲存格式為b+數,具體實現請參照「資料結構 b樹」的討論。

在create table中使用foreign key短語來定義哪些列為外碼,用reference短語來指明這些外碼參照哪些表的主碼。

[例]:

create table sc

(sno char(9) not null,

cno char(4) not null,

grade smallint,

primary key (sno,cno),

foreign key (sno) reference student(sno),

foreign key (cno) reference course(cno)

);

上段**為表sc定義了表級約束條件主碼為sno和cno,同時sno,cno分別為表student,course的外碼。

以sc表和student表為例,破壞參照完整性的情況大致有一下四種情況。

sc表中增加乙個元組,元組的sno屬性在student中找不到。

修改sc表中的元組,sno屬性在student中找不到。

從student表中刪除乙個元組,使sc表中的sno屬性在表student中找不到對應元組。

修改student表,使sc表中的sno屬性在表student中找不到對應元組。

可能破壞參照完整性的情況和違約處理

被參照表

參照表 

違約處理

可能破壞參照完整性

插入元素

拒絕可能破壞參照完整性

修改外碼值

拒絕刪除元組

可能破壞參照完整性

拒絕/級連/置空

修改主碼值

可能破壞參照完整性

拒絕/級連/置空

顯示說明參照完整性違約處理示例。

資料庫 完整性約束

問題描述 現有乙個商店的資料庫 shopping 記錄客戶及其購物情況,由以下四個關係組成 a 客戶表customer 儲存客戶資訊,包括客戶號customerid 客戶姓名cname 位址address 電子郵件email 性別gender 身份證號cardid 號碼telcode。b 商品表go...

資料庫完整性 MySQL新增約束

1 作業系統 window10 2 mysql 5.7 1.建立乙個教工表teacher tno,tname,tadd,telphone,t id 將教工號tno設為主鍵,性別預設值為 男 create table teacher tno char 7 primary key,tname char ...

資料庫完整性 MySQL新增約束

1 作業系統 window10 2 mysql 5.7 1.建立乙個教工表teacher tno,tname,tadd,telphone,t id 將教工號tno設為主鍵,性別預設值為 男 create table teacher tno char 7 primary key,tname char ...