oracle10g系统管理之约束管理

本文详细介绍了Oracle数据库中的五种约束类型,包括NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY及CHECK约束,同时还探讨了约束的不同状态及其应用,如ENABLE VALIDATE、ENABLE NOVALIDATE等,并解释了如何使用延期约束检查来优化事务处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">1.</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style=""><span style="font-size: small;">约束分类:</span></span></p>
<p class="MsoNormal" style=""><span style="font-family: Times New Roman;"><span style="" lang="EN-US"><span style=""><span style="font-size: small;">1)</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span lang="EN-US"><span style="font-size: small;">NOT NULL</span></span></span><span style="font-size: small;"><span style="">:确保列不能为</span><span lang="EN-US"><span style="font-family: Times New Roman;">NULL</span></span><span style="">。如果列上定义了</span><span lang="EN-US"><span style="font-family: Times New Roman;">NOT NULL </span></span><span style="">约束,插入数据时,必须为该列提供数据。</span></span></p>
<p class="MsoNormal" style=""><span style="font-family: Times New Roman;"><span style="" lang="EN-US"><span style=""><span style="font-size: small;">2)</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span lang="EN-US"><span style="font-size: small;">UNIQUE</span></span></span><span style="font-size: small;"><span style="">约束用于唯一标识列的数据。当定义了唯一约束后,唯一约束列的列支不能重复,但允许列为</span><span lang="EN-US"><span style="font-family: Times New Roman;">NULL</span></span><span style="">。当在表的某一列上定义了唯一约束后,默认情况下</span><span lang="EN-US"><span style="font-family: Times New Roman;">Oracle</span></span><span style="">会自动基于唯一约束列建立唯一索引,并且索引名与约束名完全一致。</span></span></p>
<p class="MsoNormal" style=""><span style="font-family: Times New Roman;"><span style="" lang="EN-US"><span style=""><span style="font-size: small;">3)</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span lang="EN-US"><span style="font-size: small;">PRIMARY KEY</span></span></span><span style=""><span style="font-size: small;">:主键约束</span></span></p>
<p class="MsoNormal" style=""><span style="font-family: Times New Roman;"><span style="" lang="EN-US"><span style=""><span style="font-size: small;">4)</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span lang="EN-US"><span style="font-size: small;">FOREIGN KEY</span></span></span><span style="font-size: small;"><span style="">:外键约束,定义了主从表之间的关系。外键约束要定义在重表上,但主表必须具有主键约束或唯一约束。定义了外键约束后,要求外部健列的数据必须在主表的主键列中存在,或者为</span><span lang="EN-US"><span style="font-family: Times New Roman;">NULL</span></span><span style="">。</span></span></p>
<p class="MsoNormal" style=""><span style="font-family: Times New Roman;"><span style="" lang="EN-US"><span style=""><span style="font-size: small;">5)</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span lang="EN-US"><span style="font-size: small;">CHECK</span></span></span><span style="font-size: small;"><span style="">:</span><span lang="EN-US"><span style="font-family: Times New Roman;">CHECK</span></span><span style="">约束用于强制表行数据必须满足的条件。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">2.</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style=""><span style="font-size: small;">约束的状态</span></span></p>
<p class="MsoNormal" style=""><span style="font-family: Times New Roman;"><span style="" lang="EN-US"><span style=""><span style="font-size: small;">1)</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span lang="EN-US"><span style="font-size: small;">ENABLE VALIDATE</span></span></span><span style="font-size: small;"><span style="">(默认状态)当将约束转变为</span><span lang="EN-US"><span style="font-family: Times New Roman;">ENABLE VALIDATE</span></span><span style="">状态时,要求新旧数据必须同时满足约束规则。假定在</span><span lang="EN-US"><span style="font-family: Times New Roman;">NAME</span></span><span style="">列上定义了唯一约束,那么将约束转变为</span><span lang="EN-US"><span style="font-family: Times New Roman;">ENABLE VALIDATE</span></span><span style="">状态时,</span><span lang="EN-US"><span style="font-family: Times New Roman;">NAME</span></span><span style="">列上不能有重复值。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt;"><span style="font-size: small;"><span style="">如果在定义和增加约束时不指定约束状态,则约束的默认状态为</span><span lang="EN-US"><span style="font-family: Times New Roman;">ENABLE VALIDATE</span></span><span style="">状态。</span></span></p>
<p class="MsoNormal" style=""><span style="font-family: Times New Roman;"><span style="" lang="EN-US"><span style=""><span style="font-size: small;">2)</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span lang="EN-US"><span style="font-size: small;">ENABLE NOVALIDATE </span></span></span><span style=""><span style="font-size: small;">当约束转为此状态时,已存在数据可以不满足该约束,新增数据必须满足此约束规则。</span></span></p>
<p class="MsoNormal" style=""><span style="font-family: Times New Roman;"><span style="" lang="EN-US"><span style=""><span style="font-size: small;">3)</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span lang="EN-US"><span style="font-size: small;">DISABLE VALIDATE </span></span></span><span style="font-size: small;"><span style="">此状态不允许在表上执行任何</span><span lang="EN-US"><span style="font-family: Times New Roman;">DML</span></span><span style="">操作。对于主键和唯一约束来说,会删除相应的唯一索引,但约束规则仍然有效。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt;"><span style="font-size: small;"><span style="">该状态主要用于分区表和非分区表之间使用</span><span lang="EN-US"><span style="font-family: Times New Roman;">ALTER TABLE …EXCHANGE PARATITION</span></span><span style="">命令进行数据交换。</span></span></p>
<p class="MsoNormal" style=""><span style="font-family: Times New Roman;"><span style="" lang="EN-US"><span style=""><span style="font-size: small;">4)</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span lang="EN-US"><span style="font-size: small;">DISABLE NOVALIDATE</span></span></span><span style=""><span style="font-size: small;">对于主键和唯一约束来说,为删除相应的唯一索引,约束规则失效。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">3.</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style="font-size: small;"><span style="">使用延期约束检查</span><span style="font-family: Times New Roman;"> </span><span style="">默认情况下,当执行</span><span lang="EN-US"><span style="font-family: Times New Roman;">DML</span></span><span style="">操作时,如果键入了违反约束规则的数据,则会立即提示错误信息。但是在某些情况下,我们可能会希望在事务结束以后进行约束检查。如果要用此功能,我们必须在定义约束时,指定</span><span lang="EN-US"><span style="font-family: Times New Roman;">DEFERRABLE</span></span><span style="">选项。示例如下:</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span lang="EN-US"><span style="font-size: small; font-family: Times New Roman;">deptno NUMBER(4) CONSTRAINT s_emp_fk REFERENCES s_dept(deptno) DEFERRABLE;</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">4.</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style=""><span style="font-size: small;">显示约束信息</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span lang="EN-US"><span style="font-size: small; font-family: Times New Roman;">SELECT constraint_name, constraint_type,status,validate</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span lang="EN-US"><span style="font-size: small; font-family: Times New Roman;">FROM dba_constraints</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">WHERE owner=</span></span><span style="">‘</span><span lang="EN-US"><span style="font-family: Times New Roman;">SCOTT</span></span><span style="">’</span><span lang="EN-US"><span style="font-family: Times New Roman;">AND table_name=</span></span><span style="">‘</span><span lang="EN-US"><span style="font-family: Times New Roman;">EMPLOYEE</span></span><span style="">’;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style=""><span style="font-size: small;">显示约束列:</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">SELECT column_name FROM</span></span><span style=""> </span><span lang="EN-US"><span style="font-family: Times New Roman;">dba_cons_columns WHERE owner=’’SCOTT’ AND constraints_name=’CHECK_JOB’;</span></span></span></p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值