1. 程式人生 > 其它 >MySQL學習筆記.資料庫完整性

MySQL學習筆記.資料庫完整性

技術標籤: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
);