如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
SQL中的完整性约束完整性约束的目的是保证用户对数据库进行修改时不会破坏数据的一致性(防止对数据的意外破坏)。注意:数据的完整性与安全性的概念区别。前者是为了防止数据库中存在不符合语义的数据(防止数据垃圾),后者是防止对数据的非法存取。DBMS的完整性约束数据库的完整性是指数据的正确性和相容性。DBMS必须提供一些功能来保证数据库中数据的完整性,也称其为完整性检查,即提供一定的机制来检查数据库中的数据是否满足规定的条件(称为完整性约束条件)。1、完整性约束条件NOTNULL约束缺省值UNIQUE约束PRIMARYKEY约束FOREIGNKEY约束CHECK约束NOTNULL约束限定了表的某一列中必须有值;缺省值在数据录入时,若没有输入数据,数据库自动输入一个预先规定的值;UNIQUE约束该列的值在表中不能重复出现(可以有空值);PRIMARYKEY约束用来唯一标识表中的一行(不能有空值),必须是唯一的列(应选择一般不会改变、短的和数值型的列);CHECK约束根据逻辑表达式来限定值域;FOREIGNKEY约束用来约束两个表间的关系(也称引用完整性约束)2、DBMS中的完整性约束实现机制1)定义表的约束条件SQL>createtabledemo(tnonumber(4,0)primarykey,tnamechar(8)notnull,sexchar(2)check(sexin(‘男’,‘女’)),salarynumber(6,2)default(0),tcodenumber(4,0)unique,deptvarchar2(200));createtablefather_t(Cnointegerprimarykey,Cnamechar(10)notnull,Creditnumeric(3,1));2)断言(Assertion)一个断言就是一个谓词,表达了我们希望数据库总能满足的一个条件。请看下页示例:createTableCourse(Cnointegernotnull,Tnointegernotnull,Cnamechar(10)notnull,creditnumeric(3,1)notnull,Primarykey(cno,tno));Createassertionsum-constraintcheck((selectcount(distinctTno)fromcourse)<(selectcount(*)fromteacher)*0.6)断言是不与任何一个表相联系的约束。3)定义触发器(Trigger)触发器是一种特殊的存储过程,它在插入、删除、修改特定表中的数据时,触发执行(由DBMS自动调用)。它能提供比数据库本身标准功能更精细、更复杂的数据控制能力。可用于数据库的安全性控制和完整性检查。请看下页范例:createtableTeacher(TnointegerPrimaryKey,Tnamechar(6)notnull,Titlechar(6),Deptchar(10));insertintoTeachervalues(101,'李华','讲师','计算机');Tno教师编号Tname姓名Title职称Dept部门createtriggertrig_demo1onteacherfordeleteasdeletecoursefromcourse,deletedwherecourse.tno=deleted.tnocreatetriggertrig_demo2onteacherforupdateasifupdate(Tno)beginDeclare@old_Tnointeger,@new_Tnointegerselect@old_Tno=Tnofromdeleted;select@new_Tno=Tnofrominserted;updatecoursesetcourse.Tno=@new_Tnowherecourse.Tno=@old_Tno;end;createtriggertestondemo1forupdateasifupdate(xm)beginDeclare@old_xmchar(8),@new_xmchar(8)select@old_xm=xmfromdeleted;select@new_xm=xmfrominserted;updatedemo2setdemo2.zzxm=@new_xmwheredemo2.zzxm=@old_xm;end;{OraclePL/SQL}createtriggertestafterupdate