《数据库系统概论》实验报告 | ||||
题 目:实验4 数据控制(完整性部分) | 姓名 | *** | 日期 | 2009-5-20 |
实验环境:硬件:CPU:P4 硬盘:80G 内存:512M 软件:KingbaseES及其交互式查询工具ISQLW 操作系统:Windows XP | ||||
实验内容与完成情况: 使用SQL对数据进行完整性控制(3类完整性、CHECK短语、CONSTRAIN子句、触发器)。用实验证实,当操作违反了完整性约束条件时,系统是如何处理的。因为完整性约束绝大部分是在定义表结构时进行的,因此可能需要多次定义表。如果表名发生重复的话,可以先将旧表删除后再建立。
[例1]定义表STUDENT,并将表中的SNO属性定义为码。 CREATE TABLE STUDENT( SNO CHAR(9) PRIMARY KEY, SNAME CHAR(20) NOT NULL, SSEX CHAR(2), SAGE SMALLINT, SDEPT CHAR(20)); 或 CREATE TABLE STUDENT( SNO CHAR(9), SNAME CHAR(20) NOT NULL, SSEX CHAR(2), SAGE SMALLINT, SDEPT CHAR(20), PRIMARY KEY(SNO)); [例2]定义表SC,将表中的SNO,CNO属性组定义为码。 CREATE TABLE SC( SNO CHAR(9) NOT NULL, CNO CHAR(4) NOT NULL, GRADE SMALLINT, PRIMARY KEY(SNO,CNO));
[例3]定义表SC中的参照完整性。 CREATE TABLE SC( SNO CHAR(9) NOT NULL, CNO CHAR(4) NOT NULL, GRADE SMALLINT, PRIMARY KEY(SNO,CNO), FOREIGN KEY(SNO)REFERENCES STUDENT(SNO), FOREIGN KEY(CNO)REFERENCES COURSE(CNO));
[例4]不允许取空值。 在定义SC表时,说明SNO,CNO,GRADE属性不允许取空值。 CREATE TABLE SC( SNO CHAR(9) NOT NULL, CNO CHAR(4) NOT NULL, GRADE SMALLINT NOT NULL, PRIMARY KEY(SNO,CNO), 。。。 ); [例5]列值唯一。 建立部门表DEPT,要求部门名称DNAME列取值唯一,部门编号DEPTNO列为主码。 CREATE TABLE DEPT( DEPTNO NUMERIC(2), DNAME CHAR(9) UNIQUE, LOCATION CHAR(10), PRIMARY KEY(DEPTNO)); [例6]用CHECK短语指定列值应该满足的条件。 定义STUDENT表的SSEX只允许取"男"或"女"。 CREATE TABLE STUDENT( SNO CHAR(9) PRIMARY KEY, SNAME CHAR(8) NOT NULL, SSEX CHAR(2) CHECK(SSEX IN('男','女')), SAGE SMALLINT, SDEPT CHAR(20)); [例7]定义SC表的GRADE的值应该在0和100之间。 CREATE TABLE SC( SNO CHAR(9) NOT NULL, CNO CHAR(4) NOT NULL, GRADE SMALLINT CHECK(GRADE>=0 AND GRADE<=100), PRIMARY KEY(SNO,CNO), FOREIGN KAY(SNO)REFERENCES STUDENT(SNO), FOREIGN KEY(CNO)REFERENCES COURSE(CNO)); [例8]元组上的约束条件:在CREATE TABLE语句中可以用CHECK短语定义元组撒谎那个的约束条件,即元组级的限制。同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件。 定义STUDENT表,当学生的性别是男时,其名字不能以"Ms."打头。 CREATE TABLE STUDENT( SNO CHAR(9), SNAME CAHR(8) NOT NULL, SSEX CHAR(2), SAGE SMALLINT, SDEPT CHAR(20), PRIMARY KEY(SNO), CHECK (SSEX='女' OR SNAME NOT LIKE 'Ms.%'));
|