数据库之完整性约束

数据库对于其内部的数据应该是有要求的,即只有合法的数据才能被写入数据库中,这个合法的法一方面是由用户自己定义(用户自定义完整性),一部分是系统需求(实体完整性约束以及参照性约束)。DB Integrity 是DBMS应保证的DB的一种特性,即数据的正确性有效性和一致性。

其完整性约束的定义为:IC(Integrity Constraint) ::= (O,P,A,R)    (约束对象列、多列、元组,谓词条件(约束内容)、触发条件(何时检查),响应动作(begin))

DBI按对象不同可分为域IC和关系IC,前者是将限制施加于属性,后者是施加于一个关系中的若干元组和另一关系中的若干元组。

DBI按系统和用户可分为结构性约束(主键、外键约束,函数依赖)和内容约束(用户自定义约束)。

按触发方式可分为静态约束和动态约束。

一、静态约束 (O,P,A(默认更新即检查),R)   可对表进行约束、也可以对列进行

①、创建时的自定义语法结构如下:

Create  Table  Tablename(colname  datetype [Defaut {Defaut_constraint | Null}] [col_constr  {,col_constr...}] | ,table_constr ,{table_constr......});

其中第一个中括号为设置默认值,一般可忽略。

其二个中括号为限制条件,col_constr 列约束基本语法如下:

{Not Null |    该行不得为空

[constraint  name ]     约束名

{Unique | primary key  | check(search_condition)| References tablename [col_constr]  (候选码,主键,检验,外键)

[On delete {cascade | set null}]} }      (本表该属性为若为引用的另一表A的某列,当A中的该值删除时,本列置为空值null)

静态约束实例eg:

Create table student(S#  char(8)  not null  unique, Sname  char(10),   Ssex  char(2)  constraint  ctssex  check(Ssex = '男' or Ssex = '女'), Sage int check(Sage >=1 and Sage <= 150),D#   char(2)  references Dept(D#)  on delete cascade , Scalss char (6));

静态约束语法结构中还可以添加table_constr(第三个中括号),其基本格式与列约束一直,如下:

[constraint  name ]     约束名

{Unique (colname {,colname,......})| primary key  {,colname,......} | check(search_condition)| 

Foreing key(colname {,colname,......})     \\外键和候选键主键可为组合键  ,check中只能为元组内的条件

[On delete {cascade | set null}]} }      (本表该属性为若为引用的另一表A的某列,当A中的该值删除时,本列置为空值null)

②、使用断言Assertion

基本语法:

Create assertion <assertion_name> check  <predicate>   (每次数据库更新都调用,对运行效率比较有影响)

eg:

③、利用Alter命令修改约束


二、利用触发器(Trigger)设计动态约束

基本语法:

Create  Trigger  triggername  Before |  After      写入前or写入后执行

{Insert | Delete | Update [ of col_name {,colname,......} ] }     执行的对象和操作的对象

On  tablename  [ Refenrencing corr_name_def  {,corr_name_def,......}]   指定约束对象

[For each row | For each statement]     每一行都检查还是写完一起检查

[when  (search_condition)]    检查的条件,满足则执行下面程序

{statement |     执行的命令

begin atomic statement;  {statement; ......} END};

eg:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值