数据库的完整性约束

一、数据库的完整性约束定义
数据库的完整性约束是为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。数据库的完整性约束包括:
1) 实体完整性:规定表的每一行在表中是惟一的实体。 
2) 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。 
3) 参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。 
4) 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。
二、常用的完整性约束
1、主键约束:
主键约束是为了保证实体完整性, 主键约束就是对一个列进行了约束,约束为非空且唯一。
以下是代码   要对一个列加主键,列名为id,表名为emp
格式为:
alter table 表格名称 add constraint 约束名称 增加的约束类型 (列名)
例子:
alter table emp add constraint ppp primary key (id)
2、check约束:
属于域完整性,给一列的数据进行了限制。 比方说,年龄列的数据都要大于20的
表名(emp) 列名(age)
格式:
alter table 表名称 add constraint 约束名称 增加的约束类型 (列名)
例子:
alter table emp add constraint xxx check(age>20)
3、unique约束:
这样的约束就是给列的数据追加的不重复的约束类型
格式:
alter table 表名 add constraint 约束名称 约束类型(列名)
比方说可以给ename列加个unique,让ename列的数据不重复
例子:
alter table emp add constraint qwe unique(ename)
4、默认约束:
意思很简单就是让此列的数据默认为一定的数据
格式:
alter table 表名称 add constraint 约束名称 约束类型 默认值) for 列名
比方说:emp表中的gongzi列默认为10000
alter table emp add constraint jfsd default 10000 for gongzi
5、外键约束:
外键其实就是引用, 因为主键实现了实体的完整性, 外键实现了引用的完整性, 应用完整性规定,所引用的数据必须存在! 比方说一个表名称叫dept 里面有2列数据 一列是ID一列是ENAME
id:表示产品的编号
ename:表示产品的名称
另外一个表格名称是emp 里面有2列数据,一列是ID 一列是DID
id:表示用户号
did:表示购买的产品号
要让emp表中的did列去引用dept表中的id
可以用下面的方法
格式:
alter table 表名 add constraint 约束名称 约束类型 (列名) references 被引用的表名称(列名)
例子:
alter table emp add constraint jfkdsj foreign key (did) references dept (id)

以上内容部分来源:http://blog.sina.com.cn/s/blog_6c014ac00100kz0x.html
三、即时(immediate)约束与延迟(deferred)约束
deferred:如果 Oracle 在事务提交(commit)时才对约束执行检查,则称此约束是延迟的(deferred)。如果数据违反了延迟约束,提交操作将导致事务被回滚(undo)。 
immediate:如果约束是即时的(immediate)(非延迟的),则此约束将在语句执行结束后进行检查。如果数据违反了延迟约束,语句将被立即回滚。
一般情况下,我们用的约束初始都是immediate型的(默认),而且不好转为deferred型。但是如果初始是deferrable(需要手动指定),那deferred跟immediate 2种状态可以随意转换。
四、约束的四种状态
ENABLE(启用):确保所有输入的数据都遵从约束(constraint) 。
DISABLE(禁用):总是允许输入数据,无论数据是否遵从约束 。
VALIDATE(验证):确保已存在的数据遵从约束 。
 NOVALIDATE(无验证):允许已存在的数据不遵从约束 。
ENABLE VALIDATE 与 ENABLE 相同。Oracle 将检查约束,并保证所有数据均遵从约束。
 ENABLE NOVALIDATE 表示所有新插入或被修改的数据都必须遵从约束,但允许已存在的数据不遵从约束。 DISABLE NOVALIDATE 与 DISABLE 相同。Oracle 不会检查约束.。
DISABLE VALIDATE 将禁用约束,移除约束使用的索引,并禁止修改约束键的数据。 
约束不论哪种类型,要能够生效,必须状态是enable才行。
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值