资源描述:
《西华师范大学计算机学院》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、西华师范大学计算机学院第三章关系数据库标准语言SQL(续2)第三章关系数据库标准语言SQL3.1SQL概述3.2数据定义3.3查询3.4数据更新3.5视图3.6数据控制3.7嵌入式SQL3.8小结3.6数据控制概述3.6.1授权3.6.2收回权限小结概述数据控制亦称为数据保护,包括数据的:安全性控制完整性控制并发控制恢复SQL语言的数据控制功能SQL语言提供了数据控制功能,能够在一定程度上保证数据库中数据的安全性、完整性,并提供了一定的并发控制及恢复能力。1.完整性数据库系统必须保证数据库中的数据是完整的。在更新数据库时,关
2、系中不能出现不符合完整性要求的元组,这样才能给用户提供正确、有效的信息。实现这一目的的最直接方法,是要求用户在编写数据库应用程序时,对每个插入、删除、修改操作,都加入必要的完整性检查代码。实体完整性和主码在SQL中,实体完整性是通过主码(PrimaryKey)来实现的。一旦某个属性或属性组被定义为主码,该主码的每个属性就不能为空值,并且在关系中不能出现主码值完全相同的两个元组。主码可在定义关系的CREATETABLE语句中使用PRIMARYKEY关键字加以定义。有两种定义主码的方法,一种是在属性后增加关键字,另一种是在属性表
3、中加入额外的定义主码的子句:PRIMARYKEY(主码属性名表)例在employee表中说明eno为主码,有两种方法:1)使eno为主码CREATETABLEemployee(enochar(4)PRIMARYKEY,namevarchar(8),sexchar(2),ageinteger,dnochar(2));2)单独说明主码CREATETABLEemployee(enochar(4),namevarchar(8),sexchar(2),ageinteger,dnochar(2),PRIMARYKEY(eno));如果关
4、系的主码只含有单个属性,上面的两种方法都可以使用。如果主码由两个或两个以上属性组成,只能使用第2)种方法。如itememp表的主码由ino和eno组成,则只能采用第2)种方法,PRIMARYKEY子句应说明成:PRIMARYKEY(ino,eno)SQL中,并没有强制规定必须为每个关系指定主码,但为每个关系指定主码通常更好一些。除了主码,SQL中使用关键字UNIQUE,说明该属性(或属性组)的值不能重复出现。但说明为UNIQUE的属性可以定义为空值,与主码又有所不同。并且一个表中只能有一个主码,但可以有多个“UNIQUE”说
5、明。例说明employee表中职工不能重名,有两种方法:(1)在name属性后面加上UNIQUE说明:namevarchar(8)UNIQUE,(2)在属性列表后使用UNIQUE说明:UNIQUE(name)外部码约束的说明说明外部码的方法有两种:(1)在该属性的说明(属性名、类型)后直接加上关键字REFERENCES,后跟对应表的主码说明。格式为REFERENCES<表名>(<属性名>)其中表名为参照关系名,属性名为参照关系的主码。(2)在CREATETABLE语句的属性清单后,加上外部码的说明子句,格式为FOREIGN
6、KEY<属性名表>REFERENCES<表名>(<属性名表>)其中,属性名表中的属性可以多于一个,但必须前后对应。例说明employee表中dno为外部码,参照关系为department。两种方法分别如下:1)CREATETABLEemployee(enochar(4)PRIMARYKEY,nameverchar(8),sexchar(2),ageinteger,dnochar(2)REFERENCESdepartment(dno));2)CREATETABLEemployee(enochar(4)PRIMARYKEY,n
7、amevarchar(8),sexchar(2),ageinteger,dnochar(2),FOREIGNKEYdnoREFERENCESdepartment(dno));注意,在说明dno为employee的外部码时,department关系中的dno必须已被说明为主码。用户自定义完整性约束用户自定义完整性约束取决于应用环境的需要,因此不同数据库应用系统的自定义完整性要求是千差万别的,有些较简单,有些则较复杂。SQL中提供了非空约束、对属性的CHECK约束、对元组的CHECK约束、触发器等来实现用户的各种完整性要求。一、
8、基于属性的CHECK约束使用CHECK(检查)子句可保证属性值满足某些前提条件。CHECK子句的一般格式为CHECK<条件>属性的CHECK约束既可跟在属性的定义后,也可在定义语句中另增一子句加以说明。例:规定employee表中属性age的值不能小于18、大于65。只需将age属性说明为