注释

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,在商品表和购买表中,可以使商品表为主表,购买表为从表,商品号为外键列。

oracle 注释和约束_休闲 第一张表的创建

oracle 注释和约束_休闲_02 第二张表的构建

oracle 注释和约束_职场_03 第三张表的创建

注意:  外键格式为 constraint 约束名 foreign key(列) references 表名(列)  如果创建只是针对一列创建外键,则省去foreign key ,直接输入references即可。

商品编号一般为固定长度,则使用char类型,而不是用varchar2类型。

创建外键约束时,可以在后面继续输入 on delete cascade 将两列关联起来,当删除主表内容时,从表内容也会删除。

如果在创建的时候出现了忘记设定一些约束,也可以在添加

注意:增加 Not null约束,需要使用modify,而增加其他四种约束,使用add选项。

案例:

在上述案例中添加新的要求

1 增加商品名也不能为空

2. 增加×××也不能重复

3. 增加客户的住址只能是‘海淀’,‘朝阳’,‘东城’,‘西城’,‘通州’,‘崇文’。

oracle 注释和约束_职场_04 需求一

oracle 注释和约束_休闲_05 需求二

 

 

 

 

 

oracle 注释和约束_oracle_06 需求三

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

oracle 注释和约束_休闲_07

语法为   alter table 表名 add 新列名 类型 约束

使约束失效

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的主键

oracle 注释和约束_oracle_08

注意:在创建表设定约束时,没有设定约束的名称,系统会自动设定其约束的名称,我们可以根据查看数据字典来获取相应约束的名称,用来删除约束使用。

 

表级定义和列级定义

列级定义  在创建列的同时创建约束

表级定义  在定义完列之后,再定义约束。但Not Null  只能在列级上定义

例如

列级定义为  create table 表名(列 类型 约束);

而表级定义为 create table 表名(列 类型) constraint 约束名 约束