原创 oracle 数据完整性总结<十>

Code:
  1. 数据完整性   
  2.    数据库不仅仅是存储数据,它也必须保证所保存的数据的正确性。如果数据不正确或不一致,那么该数据的完整性可能会遭到破坏,从而给数据库本身的可靠性带来意想不到的问题。   
  3. 为了维护数据库中的数据完成性,在创建表时通常需要指定一些约束。通过表中的字段(列)定义约束,就可以防止非法数据的插入问题.对约束的定义可以再create table语句中进行,也可以在alter table语句中进行。   
  4.   
  5. 什么是约束呢?   
  6.    约束是表级的强制规定.根据约束的作用域,约束又可分为表级约束和列级约束两种。   
  7. 列级约束是指是字段定义的一部分,只能够应用在一个列上.   
  8. 表级约束是指独立于列的定义,可以应用于一个表中的多个列上。   
  9. 在oracle系统中定义约束时,通过constraint关键字为约束命名,如果用户没有为约束指定名称,系统会自动建立默认的名称。   
  10.   
  11. 总结:   
  12. ?   作用范围:列级约束只能作用在一个列上,而表约束可以作用在多个列上(当然表约束也可以作用在一个列上)。   
  13. ?   定义方式:列约束必须跟在列的定义里后面,表约束不与列一起,而是单独定义。   
  14. ?   非空(not null) 约束只能定义在列上   
  15.   
  16.   
  17. 备注:在定义约束时,可以通过指定enable或disable关键字将约束的初始状态设置为激活或禁用状态,默认是激活状态。   
  18.   
  19. 定义约束的语法格式1:   
  20. CREATE TABLE [schema.]table   
  21.         (column datatype [DEFAULT expr]   
  22.         [column_constraint],   
  23.         ...   
  24.         [table_constraint][,...]);   
  25.   
  26. 列级约束:   
  27.   column [CONSTRAINT constraint_name] constraint_type,   
  28. 表级约束   
  29.   column,...   
  30.   [CONSTRAINT constraint_name] constraint_type    
  31.   (column, ...),   
  32.   
  33. 约束的分类为:   
  34. •   NOT NULL   
  35. •   UNIQUE    
  36. •   PRIMARY KEY   
  37. •   FOREIGN KEY   
  38. •   CHECK   
  39. 1、  Not null  
  40. 特点如下:   
  41.     为字段定义not null 约束后,该字段不能为null值   
  42.     Not Null约束只能在列级定义   
  43.     在定义一个表中可以有多个not Null    
  44. 2、  unique    
  45. 特点如下:   
  46.     如果为字段定义了unique约束,该字段不能够包含重复值   
  47.     unique约束既可以在列级定义,也可以在表级定义。   
  48.     在oracle系统中被定义的unique约束会自动建立一个唯一的索引。   
  49.     同一个字段既可以在其上定义为not null 也可以建立unique约束,(为某个字段可以添加多个约束),注意:如果在一个字段仅定义了unique约束,则该字段可以包含多个null值   
  50.       
  51. Unique主要的目的是:是在保证主键列外,其它列的唯一性。   
  52. 3、  primary key   
  53. 特点如下:   
  54.     定义为primary key的字段或字段组中不能包含重复值,并且不能为null值.(即满足唯一性,不能为空)   
  55.     在一个表中只能定义一个primary key的约束   
  56.     Oracle会自动为具有primarykey约束的字段添加一个唯一的索引,以及一个not null约束   
  57. 4、  foreign key   
  58. 特点如下:    
  59.        被定义了foreign key约束的字段的取值只能为相关表中引用的字段的值或null值。   
  60.     foreign key约束既可以在列级定义,也可以在表级定义。   
  61.     定义了foreign key约束的外键字段和被引用的主键字段可以在同一张表中,这种情况称为:’自引用’(构成了自关联关系)   
  62.     对于同一个字段可以同时定义为foreign key约束和not null约束。   
  63.   
  64. 注意:外键的类型、尺寸等一定要与主键完全一致。   
  65. 备注:   
  66.    在oracle中级联删除有如下三值:   
  67. 1、  no action 在删除一方的情况下,对多方不进行任何操作.(不能删,删的情况会出现, 违反完整约束条件的异常信息)   
  68. 2、  cascade   
  69.  在删除一方的时,会把多方所有与1方关联的数据删除掉。   
  70. 3、  set null  
  71.          在删除一方的时,会把多方所有与1方关联的数据的字段值设置为null(注意:该字段必须允许为null 否则的话会出现无法更新***为 NULL)。   
  72. 5、  check      
  73. check约束是所有约束中最灵活的约束,也是最复杂的约束,check约束检查输入到表中的数据值来维护域的完整性,即检查输入的每一个数据,只有符合条件的数据才允许输入到表中.check约束有如下特点:   
  74.       在check约束的表达式中,必须引用表中一个或多个字段,并且表达式的运算结果必须是一个布尔值.   
  75.       Check约束即可以在列级定义,也可以在表级定义   
  76.       对于同一个字段可以定义多个check约束,而且对于同一个字段可以定义check约束和not null约束。   
  77.   
  78.   
  79. 综合案例:   
  80. 学生信息表   
  81.       用户名,用户密码,用户电话,用户邮箱,用户地址.   
  82.       教师名称,教师性别,教师职务,教师年龄   
  83.       ——————————————————————————————   
  84. 分析:满足1NF范式(属性不可再分)   
  85.       满足2NF范式(非主属性必须完全依赖于任一候选键)   
  86.      用户名->用户密码,用户电话,用户邮箱,用户地址.   
  87. Stu(sname,stel,semail,saddress)   
  88.      用户名—> 教师名称   
  89.      教师名称—>用户名   
  90.        
  91.     stear(sid,tname,sname)   
  92.   
  93. 教师名称—>教师性别,教师职务,教师年龄   
  94.   
  95. Teacher(tname,tsex,ttitle,tage)   
  96.   
  97.   满足3NF(非主属性都不传递依赖于任一候选键)   
  98.         
  99. //创建表的语法同时也给表加约束||或者是创建表之后才用alter语句添加约束条件   
  100.   
  101. //第一步切换到管理员权限   
  102. SQL> conn system/root;   
  103. //第二步创建用户   
  104. SQL> create user slj identified by root;   
  105. //第三步为用户分配角色权限   
  106. SQL> grant connect,resource to slj;//connect 连接 resources 创建表的权限 详细参考第二次oracle课程   
  107. //切换到相应的用户   
  108. SQL> conn slj/root;   
  109. //采用create语句创建表   
  110. SQL> create table stu(   
  111.   2    sname varchar2(20) primary key,   
  112.   3    stel varchar2(11) not null,   
  113.   4    semail varchar2(40),   
  114.   5    saddress varchar2(50)   
  115.   6  );   
  116.     
  117. Table created   
  118. SQL> create table teacher(   
  119.   2     tname varchar2(20) primary key,   
  120.   3     tsex varchar2(2),   
  121.   4     ttitle varchar2(40),   
  122.   5     tage number(3) check(tage<100 and tage>20)   
  123.   6  );   
  124.     
  125. Table created   
  126. SQL> create table stear(   
  127.   2     sid number(10) primary key,   
  128.   3     tname varchar2(20) references teacher(tname),   
  129.   4     sname varchar2(20) references stu(sname)   
  130.   5  );   
  131.     
  132. Table created   
  133. SQL> commit;   
  134.   
  135. //查询约束条件   
  136. SQL> select * from user_constraints;   
  137. //查询被约束的列   
  138. SQL> select * from user_cons_columns;   
  139.   
  140.   
  141.      
  142. 以上内容归redarmy_chen创建,如需转载请附带出处,如有疑问请发送邮件至redarmy_chen@qq.com  

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值