实体完整性用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
);