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

[经验分享] oracle 注释和约束

[复制链接]

尚未签到

发表于 2018-9-21 13:33:53 | 显示全部楼层 |阅读模式
  注释
  oracle中可以对表,行中添加注释
  使用comment on 语句
  例如  对表添加注释
  comment on table emp is ‘公司雇员表’   〉〉对EMP表添加注释
  对行添加注释
  comment on column emp.deptno is ‘部门编号’
  查询注释
  根据数据字典查询
  select * from user_tab_comments where tablename=’emp’; 数据字典user_tab_comments  表注释
  select * from user_col_comments where tablename=’emp’; 数据字典user_col_comments   行注释
  约束
  约束来源于数据完整性
  数据完整性是用于确保数据遵从一定的商业和逻辑规则
  那么确保数据完整性的方式有,约束,触发器,应用程序(过程,函数)三种方法。
  约束就是其中之一,并且是三种方法中最易于维护的,并且有着很好的性能,是确保数据完整性方法中的首选。
  约束的作用
  约束用于确保数据库数据满足特定的商业规则
  oracle数据库中包括5种约束
  not null;    非空   当为该列插入数据时,不能为空值
  unique;   唯一          该列数据的值必须是唯一的,但是可以为空
  primary key; 主键     不能重复,不能为空   not null+unique  并且每一张表中只能有一个主键,可以有多列成为一个主键,但不能有多个主键。
  foreign key; 外键     用于定义主表和从表的关联,定义在从表上。定义时,要求主表的列必须是主键或者有unique约束。并且,定义外键约束后,从表的列的数据必须与主表的相同,或者为空。
  check; 检查  看插入的数据是否符合设置的检查约束,如果不符合,则报错。
  案例
  商店售货系统表设计案例
  现有一个商店的数据库,记录客户及购物情况,由下面三个表组成
  商品goods表(商品号goodsid,商品名goodsname,单价unitprice,商品类别category,供应商provider);
  客户customer表(客户号customerid,姓名name,住址address,电子邮件email,性别sex,身份证cardid);
  购买purchase表(客户号customerid,商品号goodsid,购买数量nums);
  要求:
  每个表有主键,外键
  客户姓名不能为空
  单价必须大于0,购买数量必须在1到30之间
  电子邮件不能重复
  客户的性别必须是 男或者女,默认为男。
  (案例取自韩顺平老师玩转oracle课程中)
  分析:
  一般以编号做为表的主键,商品号和客户号一般为固定长度,使用类型为char,在商品表和购买表中,可以使商品表为主表,购买表为从表,商品号为外键列。
DSC0000.png 第一张表的创建

DSC0001.png 第二张表的构建

DSC0002.png 第三张表的创建

  注意:  外键格式为 constraint 约束名 foreign key(列) references 表名(列)  如果创建只是针对一列创建外键,则省去foreign key ,直接输入references即可。
  商品编号一般为固定长度,则使用char类型,而不是用varchar2类型。
  创建外键约束时,可以在后面继续输入 on delete cascade 将两列关联起来,当删除主表内容时,从表内容也会删除。
  如果在创建的时候出现了忘记设定一些约束,也可以在添加
  注意:增加 Not null约束,需要使用modify,而增加其他四种约束,使用add选项。
  案例:
  在上述案例中添加新的要求
  1 增加商品名也不能为空
  2. 增加身份证也不能重复
  3. 增加客户的住址只能是‘海淀’,‘朝阳’,‘东城’,‘西城’,‘通州’,‘崇文’。
DSC0003.png 需求一

DSC0004.png 需求二

DSC0005.png 需求三

  如果不但需要插入新的约束,还要插入新的列
DSC0006.png


  语法为  >  使约束失效
  alter table 表名 disable constraint 约束名
  使约束生效
  alter table 表名 enable constraint 约束名
  查看约束
  数据字典  user_constraints  显示约束列  user_cons_columns
  删除约束
  alter table 表名 drop constraint 约束名称
  注意:如果删除主键,同时这是一张作为外键的主表的主键,那么删除需要在约束名后加cascade;
  alter table 表名 drop primary key cascade;
  例,删除表goods的主键
DSC0007.png

  注意:在创建表设定约束时,没有设定约束的名称,系统会自动设定其约束的名称,我们可以根据查看数据字典来获取相应约束的名称,用来删除约束使用。
  表级定义和列级定义
  列级定义  在创建列的同时创建约束
  表级定义  在定义完列之后,再定义约束。但Not Null  只能在列级上定义
  例如
  列级定义为  create table 表名(列 类型 约束);
  而表级定义为 create table 表名(列 类型) constraint 约束名 约束


运维网声明 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.iyunv.com/thread-599469-1-1.html 上篇帖子: 在 Oracle VM 和 Oracle Enterprise Linux 上构建您自己的 Oracle 扩展 RAC 集群 下篇帖子: 浅谈Oracle索引
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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