《Oracle数据库基础与应用教程》书籍教案人民邮电出版社出版於岳编写作者联系方式:airfish2000@126.com本书内容:本书全面讲述了Oracle数据库的日常管理工作内容。全共14章,包含Oracle简介和安装、Oracle客户端、管理Oracle环境、Oracle体系结构、管理Oracle存储结构、SQL语言、表、约束、视图、同义词和序列、索引、实现数据库安全、DataPump数据导出和导入、数据库备份和恢复。每章结尾提供适量的选择题、简答题和操作题,通过练习和操作实践,帮助读者巩固所学内容。本书适合Oracle爱好者、Oracle工程师、数据库管理员、培训机构以及大专院校计算机专业教师和学生使用。第8章约束约束简介8.1创建约束8.2修改约束8.3使用OEM管理约束8.5小结8.6删除约束8.48.1约束简介8.1.1什么是约束数据的完整性用于确保数据库中的数据遵从一定的商业和逻辑规则。在Oracle数据库中,当设计一个数据库应用程序时,用于保证数据库中存储数据的数据完整性,可以使用约束、触发器、应用程序(过程和函数)3种方法来实现,在这3种方法中,因为约束易于维护,并且具有最好的性能,所以作为维护数据完整性的首选。约束可以是列级别的,也可以是表级别的。如果定义约束时没有指定约束的名称,Oracle将为约束自动生成一个名称,其格式为SYS_Cn,其中,n为自然数。强烈建议在定义约束时,为约束指定一个名称。8.1.2约束优点在Oracle数据库中,约束具有以下优点。1.声明易用性2.集中规则3.灵活加载数据8.1.3约束类型在Oracle数据库中,约束可以分为以下五大类。1.非空约束2.主键约束3.唯一约束4.核查约束5.外键约束当父键被修改时,引用约束可以指定在从表中的相关行执行表8-1所示的操作。表8-1操作8.2创建约束可以在创建表时添加约束,也可以在修改表时为表添加约束。在同一个方案中,约束名必须唯一,并且约束名不能与其他的对象同名。在定义约束时可以通过CONSTRAINT为约束指定名称。如果用户没有为约束指定名称,将自动为约束创建默认的名称。8.2.1创建NOTNULL约束如果要添加NOTNULL约束,必须要使用ALTERTABLE...MODIFY语句。8.2.2创建UNIQUE、PRIMARYKEY、CKECK和FOREIGNKEY约束如果要添加UNIQUE、PRIMARYKEY、CKECK和FOREIGNKEY约束,必须要使用ALTERTABLE...ADD语句。8.3修改约束8.3.1修改约束状态作为约束定义的一部分,可以指定Oracle数据库如何以及何时强制约束,从而确定约束状态。数据库可以指定约束是否限制应用于现有数据或未来数据。如果约束被启用(ENABLE),那么数据库检查新的数据输入或更新。不符合约束的数据不能进入数据库。禁用(DISABLE)约束是指使约束临时失效。当禁用约束之后,约束规则将不再生效。在使用SQL*LOADER或INSERT载入数据之前,为了加快数据载入速度,首先应该禁用约束,然后再载入数据。可以设置约束来验证(VALIDATE)或不验证(NOVALIDATE)现有数据。如果指定了VALIDATE,那么现有的数据必须符合约束。如果指定NOVALIDATE,那么现有的数据不需要符合约束。表8-2ALTERTABLE语句参数8.3.2修改约束名称使用ALTERTABLE...RENAMECONSTRAINT语句可以修改约束的名称。8.4删除约束如果不再需要表上的约束时,可以使用ALTERTABLE...DROP语句将其从数据库中删除,Oracle数据库停止执行约束,然后从数据字典中删除。表8-3列出了ALTERTABLE语句各参数的描述信息。表8-3ALTERTABLE语句参数8.5使用OEM管理约束8.5.1使用OEM创建PRIMARYKEY约束使用OracleEnterpriseManager按以下步骤创建PRIMARYKEY约束。(1)在OracleEnterpriseManager页面中单击【方案】→【数据库对象】→【表】,在图8-1所示页面中,选择表TABLE_1,然后单击【编辑】按钮。图8-1搜索表(2)在图8-2所示【约束条件】页面中,【约束条件】下拉框中选择【PRIMARY】,然后单击【添加】按钮。图8-2【约束条件】页面(3)在图8-3所示页面中,指定PRIMARY约束的约束名称、约束列和约束属性,然后单击【继续】按钮。图8-3添加PRIMARY约束条件(4)在图8-4所示页面中,显示已经添加PRIMARY约束,最后单击【应用】按钮。图8-4已经添加PRIMARY约束8.5.2使用OEM创建UNIQUE约束使用OracleEnterpriseManager按以下步骤创建UNIQUE约束。(1)在OracleEnterpriseManager页面中单击【方案】→【数据库对象】→【表】,选择表TABLE_1,然后单击【编辑】按钮。在图8-5所示【约束条件】页面中,在【约束条件】下拉框中选择【UNIQUE】,然后单击【添加】按钮。图8-5【约束条件】页面(2)在图8-6所示页面中,指定UNIQUE约束的约束名称、约束列和约束属性,然后单击【继续】按钮。图8-6添加UNIQUE约束条件(3)在图8-7所示页面中,显示已经添加UNIQUE约束,最后单击【应用】按钮。图8-7已经添加UNIQUE约束8.5.3使用OEM创建CHECK约束使用OracleEnterpriseManager按以下步骤创建CHECK约束。(1)在OracleEnterpriseManager页面中单击【方案】→【数据库对象】→【表】,选择表TABLE_1,然后单击【编辑】按钮。在图8-8所示【约束条件】页面中,在【约束条件】下拉框中选择【CHECK】,然后单击【添加】按钮。图8-8【约束条件】页面(2)在图8-9所示页面中,指定CHECK约束的约束名称、检查条件和约束属性,然后单击【继续】按钮。图8-9添加CHECK约束条件(3)在图8-10所示页面中,显示已经添加CHECK约束,最后单击【应用】按钮。图8-10已经添加CHECK约束8.5.4使用OEM创建FOREIGNKEY约束使用OracleEnterpriseManager按以下步骤创建FOREIGNKEY约束。(1)在OracleEnterpriseManager页面中单击【方案】→【数据库对象】→【表】,选择表TABLE_2,然后单击【编辑】按钮。在图8-11所示【约束条件】页面中,在【约束条件】下拉框中选择【FOREIGN】,然后单击【添加】按钮。图8-11【约束条件】页面(2)在图8-12所示页面中,指定FOREIGN约束的约束名称、约束列、引用表和引用表列,以及约束属性,然后单击【继续】按钮。图8-12添加FOREIGN约束条件(3)在图8-13所示页面中,显示已经添加FOREIGN约束,最后单击【应用】按钮。图8-13已经添加FOREIGN约束8.5.5使用OEM删除约束使用OracleEnterpriseManager按以下步骤删除约束。编辑方案SYS中的表TABLE_1,在图8-14所示【约束条件】页面中,选择约束PK_TABLE_1_ID,然后单击【删除】按钮,最后单击【应用】按钮。图8-14删除约束8.6小结约束是强加在表上的规则或条件,确保数据库中的数据满足特定的商业逻辑或企业规则,保证数据的完整性,防止无效的数据进入数据库,从而使数据库的开发和维护都更加容易。当对表进行DML或DDL操作时,如果造成表中的数据违反约束条件或规则的话,系统就会拒绝执行这个操作。在Oracle数据库中,约束可以分为非空约束、主键约束、唯一约束、核查约束和外键约束五大类。可以在创建表时添加约束,也可以在修改表时为表添加约束。如果要添加NOTNULL约束,必须要使用ALTERTABLE...MODIFY语句。如果要添加UNIQUE、PRIMARYKEY、CKECK和FOREIGNKEY约束,必须要使用ALTERTABLE...ADD语句。作为约束定义的一部分,可以指定Oracle数据库如何以及何时强制约束,从而确定约束状态。数据库可以指定约束是否限制应用于现有数据或未来数据。如果约束被启用(ENABLE),那么数据库检查新的数据输入或更新。不符合约束的数据不能进入数据库。禁用(DISABLE)约束是指使约束临时失效。当禁用约束之后,约束规则将不再生效。使用ALTERTABLE...RENAMECONSTRAINT语句可以修改约束的名称。如果不再需要表上的约束时,可以使用ALTERTABLE...DROP语句将其从数据库中删除,Oracle数据库停止执行约束,然后从数据字典中删除。