注释
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,在商品表和购买表中,可以使商品表为主表,购买表为从表,商品号为外键列。
p_w_picpath 第一张表的创建
p_w_picpath 第二张表的构建
p_w_picpath 第三张表的创建
注意: 外键格式为 constraint 约束名 foreign key(列) references 表名(列) 如果创建只是针对一列创建外键,则省去foreign key ,直接输入references即可。
商品编号一般为固定长度,则使用char类型,而不是用varchar2类型。
创建外键约束时,可以在后面继续输入 on delete cascade 将两列关联起来,当删除主表内容时,从表内容也会删除。
如果在创建的时候出现了忘记设定一些约束,也可以在添加
注意:增加 Not null约束,需要使用modify,而增加其他四种约束,使用add选项。
案例:
在上述案例中添加新的要求
1 增加商品名也不能为空
2. 增加身份证也不能重复
3. 增加客户的住址只能是‘海淀’,‘朝阳’,‘东城’,‘西城’,‘通州’,‘崇文’。
p_w_picpath 需求一
p_w_picpath 需求二
p_w_picpath 需求三
如果不但需要插入新的约束,还要插入新的列
p_w_picpath
语法为 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的主键
p_w_picpath
注意:在创建表设定约束时,没有设定约束的名称,系统会自动设定其约束的名称,我们可以根据查看数据字典来获取相应约束的名称,用来删除约束使用。
表级定义和列级定义
列级定义 在创建列的同时创建约束
表级定义 在定义完列之后,再定义约束。但Not Null 只能在列级上定义
例如
列级定义为 create table 表名(列 类型 约束);
而表级定义为 create table 表名(列 类型) constraint 约束名 约束
©著作权归作者所有:来自51CTO博客作者郑伟的原创作品,如需转载,请注明出处,否则将追究法律责任
oracle职场字典『ORACLE』
共同学习,写下你的评论
评论加载中...
作者其他优质文章