玥殇 发表于 2018-9-21 13:33:53

oracle 注释和约束

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


  语法为>  使约束失效
  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的主键

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

页: [1]
查看完整版本: oracle 注释和约束