首页 百科知识 完整性控制语句

完整性控制语句

时间:2022-10-18 百科知识 版权反馈
【摘要】:从域约束及表约束中可以看出,完整性控制语句往往附加于创建表语句中,而只有断言语句是独立的。因此,一个完整的创建表语句应该是具有如下的形式:断言:当完整性约束涉及到多个表时,此时可用断言来建立多表间列的约束条件。

8.3.1 SQL完整性控制语句

SQL完整性控制语句一般用于用户自定义的完整性约束设置,它包括如下内容:

1)域约束

可以约束数据库中数据域的范围与条件,该约束可用多种方法放在创建表语句中列定义的后面。

(1)CHECK短句

CHECK<约束条件>

其中约束条件为一个逻辑表达式,域约束往往定义在SQL中创建表语句中列定义的后面。

(2)默认值短句

在域约束中还可以定义默认值DEFAULT如下:

DEFAULT<常量表达式>

默认值表示对应列中为空则选用<常量表达式>中的数据。该约束也定义在列后面。

(3)列值唯一

可在列定义后给出UNIQUE以表明该列取值唯一。

(4)不允许取空值

可在列定义后给出NOT NULL以表明该列值为非空。

2)表约束

可以约束表的范围与条件,它包括三部分内容:主键定义、外键定义及检查约束。

(1)主键约束:可用PRIMARY KEY<列名序列>,表示表中的主键,它们一般定义在创建表语句的后面。

(2)外键定义:可用下面的形式表示外键定义:

FOREIGN KEY<列名序列>

REFERENCE<参照表><列名序列>

[ON DELETE<参照动作>]

[ON UPDATE<参照动作>]

其中第一个<列名序列>是外键而第二个<列名序列>则是参照表中的主键,而参照动作有五个,它们是:NO ACTION(默认值)、CASCADE、RESTRICT、SET NULL及SET DE-FAULT分别表示无动作、动作受牵连、动作受限、置空及置默认值等,其中动作受牵连表示在删除(或修改)元组时相应表中的相关元组一起删除(或修改),而动作受限则表示在删除(或修改)时仅限于指定的表的元组。它们一般也定义在创建基表语句的后面。

(3)检查约束:用于对表内的属性间设置语义约束,所使用的语句形式如下:

CHECK<约束条件>

它一般也定义在创建表的语句中。

例8.7

img166

此中用创建表语句定义student,在最后由PRIMARYKEY(sno)确定主键为sno。

例8.8

img167

在此例中用创建表语句定义EMP,在定义最后确定有关表的约束,其中:

①PRIMARY KEY(sno,cno):确定主键为(sno,cno);

②FOREIGN KEY(sno):确定外键为sno;

③REFERENCES DEPT S(sno):确定其外键所对应的另一表为S,而所对应的主键为sno;

④ON DELETE CASCADE:表示当要删除DEPT表中某一元组时,系统也要检查SC1表,若找到相应元组则将它们也随之删除。

从域约束及表约束中可以看出,完整性控制语句往往附加于创建表语句中,而只有断言语句是独立的。根据这个思想,一个完整的创建表语句需要包括表定义及完整性约束定义两部分。因此,一个完整的创建表语句应该是具有如下的形式:

CREATE TABLE<表名>(<列定义>,[<列定义>]…)[<表完整性约束条件>]

其中<列定义>:=<列名><数据类型>[<域完整性约束>]

下面的例8.9给出了学生数据库中三个表S,SC及C的完整定义。

例8.9 学生数据库S,SC及C的完整定义如下:

img168

img169

(3)断言:当完整性约束涉及到多个表(包括一个表)时,此时可用断言(assertion)来建立多表间列的约束条件。在SQL中,可用创建断言与撤消断言来建立与撤消约束条件,它们是:

img170

其中约束条件一般可有三种形式:

●非空属性(NOT NULL);

●惟一属性(UNIQUE);

●用布尔表达式表示的列间关系。

例8.10

img171

在此例中是建立了三个完整性约束条件:

(1)学号必须在90000~99999之间。

(2)学生姓名不能为空值。

(3)学生年龄必须小于29岁。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈