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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值