MySQL學習筆記.資料庫完整性
阿新 • • 發佈:2020-12-14
技術標籤:MySQL學習筆記
目錄
實體完整性
實體完整性用PRIMARY KEY定義
例:將book表中的id屬性定義為主碼
列級定義主碼
CREATE TABLE BOOK(
ID CHAR(8) PRIMARY KEY(ID),
AUTHOR CHAR(30),
PRICE FLOAT
);
表級定義主碼
CREATE TABLE BOOK(
ID CHAR(8),
AUTHOR CHAR(30),
PRICE FLOAT,
PRIMARY KEY(ID)
);
多屬性主碼只能在表級定義
CREATE TABLE BOOK(
ID CHAR(8),
AUTHOR CHAR(30),
PRICE FLOAT,
PRIMARY KEY(ID,AUTHOR)
);
PRIMARY KEY 約束唯一標識資料庫表中的每條記錄。
主鍵必須包含唯一的值。
主鍵列不能包含 NULL 值。
每個表都應該有一個主鍵,並且每個表只能有一個主鍵。
定義完整性
1.不允許空值
例:在定義一張表book時,定義書的id,author,price不能取空值
CREATE TABLE BOOK(
ID CHAR(8) NOT NULL,
AUTHOR CHAR(30) NOT NULL,
PRICE FLOAT NOT NULL
) ;
2.列值唯一
例:建立一張表book,要求其author唯一
CREATE TABLE BOOK(
ID CHAR(8) NOT NULL,
AUTHOR CHAR(30) UNIQUE NOT NULL,
PRICE FLOAT NOT NULL,
PRIMARY KEY(ID)
);
3.用CHECK短語指定列值應該滿足的條件
例:只允許book表中sex取男或女
CREATE TABLE BOOK(
ID CHAR(8) PRIMARY KEY,
AUTHOR CHAR(30),
SEX CHAR(2) CHECK(SEX IN ('男','女')),
PRICE FLOAT
);
price只允許取1-500的值
CREATE TABLE BOOK(
ID CHAR(8) PRIMARY KEY,
AUTHOR CHAR(30),
SEX CHAR(2),
PRICE FLOAT CHECK (price>=1 AND price<=500)
);
參照完整性
參照完整性在create table中用foreign key定義外碼,用references指明這些外碼參照哪些表的主碼
CREATE TABLE BOOK(
ID CHAR(8),
AUTHOR CHAR(30),
SEX CHAR(2),
PRICE FLOAT,
PRIMARY KEY(ID,PRICE)
);
CREATE TABLE ADDRESS(
ID CHAR(8),
ADDRESS CHAR(3),
PRICE FLOAT,
FOREIGN KEY(ID) REFERENCES BOOK(ID),
FOREIGN KEY(PRICE) REFERENCES BOOK(PRICE)
);
參照完整性違約處理
1.NO ACTION 拒絕執行
2.CASCADE級聯操作
CREATE TABLE BOOK(
ID CHAR(8),
AUTHOR CHAR(30),
SEX CHAR(2),
PRICE FLOAT,
PRIMARY KEY(ID,PRICE)
);
CREATE TABLE ADDRESS(
ID CHAR(8),
ADDRESS CHAR(3),
PRICE FLOAT,
FOREIGN KEY(ID) REFERENCES BOOK(ID)
ON UPDATE CASCADE,
FOREIGN KEY(PRICE) REFERENCES BOOK(PRICE)
ON UPDATE CASCADE
);