oracle 约束

约束:对数据库中的表的字段加一些限制.
     这是保护数据的最后一道屏障.
列级别约束:在定义表的一列时  直接在这一列的后面加约束限制.


表级别约束:在定义完表的所有列之后,再选择某些
列加约束限制.


5种具体的约束:
主键     primary  key
    这个字段是非空的 并且是唯一的
    一个表的主键只能有一个 


唯一     unique
    这个字段的值 是不能重复的 
    
非空     not  null
    这个字段的值  不能是NULL值 
检查     check
    这个字段的值 必须符合检查条件 

外键     references    foreign key  
         on delete cascade  
         on delete set  null
---------------------------------------
1.主键的列级约束
  create  table  testcolcons(
      id    number primary  key,
      name  varchar2(30)
  );  


  insert  into  testcolcons values(1,'yaoming');
  commit;
  insert  into  testcolcons values(1,'maidi');
  commit;
 ERROR at line 1:
ORA-00001: unique constraint ( OPENLAB.SYS_C00233568)
 OPENLAB.SYS_C00233568

  insert  into  testcolcons values(NULL,'maidi');


SYS_C00233568 这是系统为你的约束起的名字 
系统能保证这个名字不重复。
自己给约束起名字 : constraint 约束名字
 create  table  testcolcons(
      id    number constraint testcolcons_id_pk  primary  key,
      name  varchar2(30)
  );  

------------

2.列级约束  unique

 create  table  testcolcons(
     id  number  constraint  
        testcolcons_id_pk   primary key,
     name  varchar2(30)  constraint
        testcolcons_name_uk   unique
 );


3.列级约束的  非空
 create  table  testcolcons(
      id    number  not null,
      name  varchar2(30)
  );  


4.检查约束 check

  检查条件工资必须大于4500   
 create table  testcolcons(
     id   number   constraint 
       testcolcons_id_pk  primary key,
     name varchar2(30),
     salary  number constraint 
       testcolcons_salary_ck check(salary>4500)
 );

 ----------------------------------
 表级约束:在定义完所有的列之后  再选择某些列加约束
 1.主键的表级约束
  create table   testtablecons(
      id    number  ,
      fname  varchar2(30),
      sname  varchar2(30),
      salary  number,
      constraint  testtablecons_id_pk  
      primary key(id) 

  );


  因为表级约束  可以做 联合约束 primary key(id,fname) 
  
  上面的 表中 把fname  设置成表级的唯一
              salary  改成 表级的检查  >4500
  因为非空没有联合非空 导致非空没有表级约束
   drop  table   testtablecons;   
   create table   testtablecons(
      id    number  ,
      fname  varchar2(30),
      sname  varchar2(30),
      salary  number,
      constraint  testtablecons_id_pk  
      primary key(id),
      constraint  testtablecons_fname_uk 
      unique(fname),
      constraint  testtablecons_salary_ck
      check(salary>4500
)       
  );


--------------------------------------------------- 
 外键约束:
 列级别的外键约束
 外键约束涉及到两张表   一张叫父表  (主表)
 另一张叫子表   (从表)    
  
 定义了外键的表 就是子表
 如果两张表建立了主外键关系  则 外键字段的值
 要么引用自父表 要么是空值。


 1.建表 
   一般先建立 父表  后建立子表
   先不建立主键关系  然后通过修改表加约束的形式
   (效率  建表顺序 比较复杂) 
   create   table  parent(
       id    number  primary  key,
       name  varchar2(30) 
   );
   create table    child(
       id    number  primary  key,
       name   varchar2(30),
        fid   number  references  parent(id)  --引用 parent表的 id 作为外键
   );
 2.放入数据  
   一般先插入父表数据  后插子表数据
   除非子表的外键值是NULL
   insert into child values(1,'test',1);
   insert into child values(2,'test',3);
  ORA-02291: integrity constraint (OPENLAB.SYS_C00234204
 3.删除表  先删子表 后删父表 
   除非父子表中无数据   或者使用
   drop table  表名   cascade constraints
   先解除主外键关系  再删除表
   drop table   parent cascade constraints;

 4.删除数据  
   一般先删子表  后删父表中
   除非没有和父表中的数据 关联的子表数据
   或者你使用级联
   on delete  cascade   级联删除

   on delete  set  null 级联置空 

  create   table  parent(
       id    number  primary  key,
       name  varchar2(30) 
   );
   create table    child(
       id    number  primary  key,
       name   varchar2(30),
       fid   number  references  parent(id)  on delete cascade  --级联删除
   );

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值