设为首页 收藏本站
查看: 727|回复: 0

[经验分享] 原创 oracle 数据完整性总结<十>

[复制链接]
YunVN网友  发表于 2016-8-17 06:23:44 |阅读模式
Code:


  • 数据完整性
  • 数据库不仅仅是存储数据,它也必须保证所保存的数据的正确性。如果数据不正确或不一致,那么该数据的完整性可能会遭到破坏,从而给数据库本身的可靠性带来意想不到的问题。
  • 为了维护数据库中的数据完成性,在创建表时通常需要指定一些约束。通过表中的字段(列)定义约束,就可以防止非法数据的插入问题.对约束的定义可以再createtable语句中进行,也可以在altertable语句中进行。

  • 什么是约束呢?
  • 约束是表级的强制规定.根据约束的作用域,约束又可分为表级约束和列级约束两种。
  • 列级约束是指是字段定义的一部分,只能够应用在一个列上.
  • 表级约束是指独立于列的定义,可以应用于一个表中的多个列上。
  • 在oracle系统中定义约束时,通过constraint关键字为约束命名,如果用户没有为约束指定名称,系统会自动建立默认的名称。

  • 总结:
  • ?作用范围:列级约束只能作用在一个列上,而表约束可以作用在多个列上(当然表约束也可以作用在一个列上)。
  • ?定义方式:列约束必须跟在列的定义里后面,表约束不与列一起,而是单独定义。
  • ?非空(notnull)约束只能定义在列上


  • 备注:在定义约束时,可以通过指定enable或disable关键字将约束的初始状态设置为激活或禁用状态,默认是激活状态。

  • 定义约束的语法格式1:
  • CREATETABLE[schema.]table
  • (columndatatype[DEFAULTexpr]
  • [column_constraint],
  • ...
  • [table_constraint][,...]);

  • 列级约束:
  • column[CONSTRAINTconstraint_name]constraint_type,
  • 表级约束
  • column,...
  • [CONSTRAINTconstraint_name]constraint_type
  • (column,...),

  • 约束的分类为:
  • ·NOTNULL
  • ·UNIQUE
  • ·PRIMARYKEY
  • ·FOREIGNKEY
  • ·CHECK
  • 1、Notnull
  • 特点如下:
  • 为字段定义notnull约束后,该字段不能为null值
  • NotNull约束只能在列级定义
  • 在定义一个表中可以有多个notNull
  • 2、unique
  • 特点如下:
  • 如果为字段定义了unique约束,该字段不能够包含重复值
  • unique约束既可以在列级定义,也可以在表级定义。
  • 在oracle系统中被定义的unique约束会自动建立一个唯一的索引。
  • 同一个字段既可以在其上定义为notnull也可以建立unique约束,(为某个字段可以添加多个约束),注意:如果在一个字段仅定义了unique约束,则该字段可以包含多个null值

  • Unique主要的目的是:是在保证主键列外,其它列的唯一性。
  • 3、primarykey
  • 特点如下:
  • 定义为primarykey的字段或字段组中不能包含重复值,并且不能为null值.(即满足唯一性,不能为空)
  • 在一个表中只能定义一个primarykey的约束
  • Oracle会自动为具有primarykey约束的字段添加一个唯一的索引,以及一个notnull约束
  • 4、foreignkey
  • 特点如下:
  • 被定义了foreignkey约束的字段的取值只能为相关表中引用的字段的值或null值。
  • foreignkey约束既可以在列级定义,也可以在表级定义。
  • 定义了foreignkey约束的外键字段和被引用的主键字段可以在同一张表中,这种情况称为:’自引用’(构成了自关联关系)
  • 对于同一个字段可以同时定义为foreignkey约束和notnull约束。

  • 注意:外键的类型、尺寸等一定要与主键完全一致。
  • 备注:
  • 在oracle中级联删除有如下三值:
  • 1、noaction在删除一方的情况下,对多方不进行任何操作.(不能删,删的情况会出现,违反完整约束条件的异常信息)
  • 2、cascade
  • 在删除一方的时,会把多方所有与1方关联的数据删除掉。
  • 3、setnull
  • 在删除一方的时,会把多方所有与1方关联的数据的字段值设置为null(注意:该字段必须允许为null否则的话会出现无法更新***为NULL)。
  • 5、check
  • check约束是所有约束中最灵活的约束,也是最复杂的约束,check约束检查输入到表中的数据值来维护域的完整性,即检查输入的每一个数据,只有符合条件的数据才允许输入到表中.check约束有如下特点:
  • 在check约束的表达式中,必须引用表中一个或多个字段,并且表达式的运算结果必须是一个布尔值.
  • Check约束即可以在列级定义,也可以在表级定义
  • 对于同一个字段可以定义多个check约束,而且对于同一个字段可以定义check约束和notnull约束。


  • 综合案例:
  • 学生信息表
  • 用户名,用户密码,用户电话,用户邮箱,用户地址.
  • 教师名称,教师性别,教师职务,教师年龄
  • ——————————————————————————————
  • 分析:满足1NF范式(属性不可再分)
  • 满足2NF范式(非主属性必须完全依赖于任一候选键)
  • 用户名->用户密码,用户电话,用户邮箱,用户地址.
  • Stu(sname,stel,semail,saddress)
  • 用户名—>教师名称
  • 教师名称—>用户名

  • stear(sid,tname,sname)

  • 教师名称—>教师性别,教师职务,教师年龄

  • Teacher(tname,tsex,ttitle,tage)

  • 满足3NF(非主属性都不传递依赖于任一候选键)

  • //创建表的语法同时也给表加约束||或者是创建表之后才用alter语句添加约束条件

  • //第一步切换到管理员权限
  • SQL>connsystem/root;
  • //第二步创建用户
  • SQL>createusersljidentifiedbyroot;
  • //第三步为用户分配角色权限
  • SQL>grantconnect,resourcetoslj;//connect连接resources创建表的权限详细参考第二次oracle课程
  • //切换到相应的用户
  • SQL>connslj/root;
  • //采用create语句创建表
  • SQL>createtablestu(
  • 2snamevarchar2(20)primarykey,
  • 3stelvarchar2(11)notnull,
  • 4semailvarchar2(40),
  • 5saddressvarchar2(50)
  • 6);

  • Tablecreated
  • SQL>createtableteacher(
  • 2tnamevarchar2(20)primarykey,
  • 3tsexvarchar2(2),
  • 4ttitlevarchar2(40),
  • 5tagenumber(3)check(tage<100andtage>20)
  • 6);

  • Tablecreated
  • SQL>createtablestear(
  • 2sidnumber(10)primarykey,
  • 3tnamevarchar2(20)referencesteacher(tname),
  • 4snamevarchar2(20)referencesstu(sname)
  • 5);

  • Tablecreated
  • SQL>commit;

  • //查询约束条件
  • SQL>select*fromuser_constraints;
  • //查询被约束的列
  • SQL>select*fromuser_cons_columns;



  • 以上内容归redarmy_chen创建,如需转载请附带出处,如有疑问请发送邮件至redarmy_chen@qq.com

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-258704-1-1.html 上篇帖子: Oracle 多表 连接 顺序 与 性能关系 测试 下篇帖子: Oracle cursor pin S wait on X 等待事件 说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表