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
);

猜你喜欢

转载自blog.csdn.net/qq_44862120/article/details/111089120