一、域完整性
1、check约束
①在创建表时创建约束
CREATE TABLE <表名>
( <列名> <数据类型> [DEFAULT <默认值>] [NOT NULL | NULL]
[CONSTRAINT <CHECK约束名>] CHECK(<CHECK约束表达式>) /*定义为列的约束*/
[,…n]
[CONSTRAINT <CHECK约束名>] CHECK(<CHECK约束表达式>) /*定义为表的约束*/
)
--eg
CREATE TABLE KCB2
(
课程号 char(3) NOT NULL,
课程名 char(16) NOT NULL,
开课学期 number(1) NULL,
学时 number(2) NULL,
学分 number(1) CHECK (学分>0 AND 学分<=10) NOT NULL
/*定义为列的约束*/
);
②在修改表时创建约束
ALTER TABLE <表名> ADD( CONSTRAINT <CHECK约束名> CHECK(<CHECK约束表达式>))
--eg
--通过修改XSCJ数据库的books表,增加trade_price(批发价)**字段**的CHECK约束。
ALTER TABLE books ADD(CONSTRAINT ch_price CHECK(trade_price<=300));
③删除约束
ALTER TABLE <表名> DROP CONSTRAINT <CHECK约束名>
--eg
--删除XSCJ数据库中books表批发价**字段**的CHECK约束。
ALTER TABLE books DROP CONSTRAINT ch_price;
二、实体完整性
1、主键及唯一约束
①创建表时创建约束
CREATE TABLE <表名> /*指定表名*/
(<列名> <数据类型> [NULL |NOT NULL] /*定义字段*/
{[CONSTRAINT <约束名>] /*定义约束名*/
PRIMARY KEY | UNIQUE} /*定义约束类型*/
[,…n]
[, [CONSTRAINT <约束名>] {PRIMARY KEY | UNIQUE}(<列名>,[,…n]) ]
]
)
--eg
CREATE TABLE XSB2
(
学号 char(6) NOT NULL CONSTRAINT PK_XH PRIMARY KEY,--按照语法PK_XH是约束名
姓名 char(8) NOT NULL,
身份证号 char(20) NOT NULL CONSTRAINT UN_ID UNIQUE,
性别 char(2) DEFAULT '1' NOT NULL,
出生时间 date NOT NULL,
专业 char(12) NULL,
总学分 number(2) NULL
);
②通过修改表来创建约束
ALTER TABLE <表名> ADD([CONSTRAINT <约束名>] {PRIMARY KEY | UNIQUE} (<列名>[,…n])
--eg
ALTER TABLE XSB3 ADD(PRIMARY KEY(学号));
③删除约束
ALTER TABLE <表名> DROP CONSTRAINT <约束名>[,…n];
--eg
ALTER TABLE XSB3 DROP CONSTRAINT UN_XS;
三、参照完整性
1、表间参照关系
①创建表的同时定义外键约束
CREATE TABLE <从表名>
( <列定义> [ CONSTRAINT <约束名> ] REFERENCES <主表名>[ ( <列名> [ ,...n ] ) ]
[,…n]
[ [ CONSTRAINT <约束名> ] [ FOREIGN KEY ( <列名> [,...n ] ) [<参照表达式>]]
);
--其中:
--<参照表达式>::=
REFERENCES <主表名>[ ( <列名> [ ,...n ] ) ]
[ ON DELETE { CASCADE | SET NULL } ]
--eg
CREATE TABLE stu
(
学号 char(6) NOT NULL REFERENCES XSB (学号),
姓名 char(8) NOT NULL
);
--eg
CREATE TABLE point
(
学号 char(6) NOT NULL,
课程号 char(3) NOT NULL,
成绩 number(2) NULL,
CONSTRAINT FK_point FOREIGN KEY (学号,课程号) REFERENCES CJB (学号,课程号) ON DELETE CASCADE
);
②通过修改表定义外键约束
ALTER TABLE <表名>
ADD CONSTRAINT <约束名>
FOREIGN KEY( <列名>[,…n])
REFERENCES <主表名>(<列名>[,…n]) <参照表达式>
③删除表间参照关系(同上约束删除语法)