oracle对约束的一些操作

来源:互联网 发布:电子数据交换的意思 编辑:程序博客网 时间:2024/05/22 11:41

维护数据的完整性(主键,外键,唯一等等)

索引,建立索引(速度快)

管理oracle的权限和角色

 

 

数据的完整性

 确保数据库的数据按照一定的商业和逻辑规则。数据完整性主要是以约束、触发器、应用程序(过程,函数)三个方面实现。约束容易维护并具有性能高,所以在维护数据的完整性上是首选。

 

约束

约束用于确保数据库数据满足特定的商业规则。约束包括:not null,(不空)unique(唯一);primary key,(主键)foreign key,(外键)和check(检查区间)五种。

Not null(非空)

在定义了一个字段为not null ,那么当插入数据时,必须这个列要提供数据。

Unique(唯一)

定义唯一约束后,该列值是不能重复的。但是可以为空null.

Primary key(主键)联合主键

用于唯一的标示表行的数据,当定义主见约束后,该列不但不能重复而且不能为空。

一张表只能有一个主键,但是可以有很多unique约束。

Foreign key(外键)

设置主表和从表之间的关系,外键约束要定义摘从表上,主表必须具有主键约束或者是 unique约束,当定义外检约束后,要求外检列束据必须在主表的主键列存在或者为null.

 Check

强执行数据必须满足的条件,假定在sal 列上定义了check约束,并要求sal列值在1000-2000之间的,如果不在这个范围就提示出错。

 

 

 

通过实例说明下:

超市售货系统数据库表的设计和实现

假如现在又一个超市让你给开发一个售货系统,记录客户信息,购买信息。简单有三个表组成:

商品表goods(商品号 goodid,商品名字goodname,单价unitprice,商品类别category, 供应商provider);

客户表 customer(客户号customerid,姓名name,住址address, 电话call,性别sex,身份证cardid;

购买表 purchase(客户号customerid,商品号goodsid ,购买量nums);

1. 每个表都有主外键

2. 客户的姓名不能为空

3. 单价必须大于0,购买数量必须在130之间

4. 电话不能重复

5. 客户的性别必须是男或者女,默认是男

商品表

create table sp(spid char(8) primary key,  商品号为主键

  2  spname varchar(30),              商品名字

3  dj number (10,2)check (dj>0),      单价大于0

  4  lb varchar2(8),                  类别

  5  gys varchar2(30));               供应商

客户表

create table kh(khid char(8) primary key,

  khname varchar2(50) not null,

  khaddress varchar2(50),

  email varchar2(50) unique,

sex char(2)default ''check (sex in ('','')),

cardid char(18));

购买表

Create table gm(khid char(8) references kh(khid),spid char(8) references sp(spid),sl number(10) check (sl between 1and 30));

 

 

如果在建立表的时候忘记了加约束条件,则可以在建立后采用alter table的方法添加,但是注意增加not null 权限的时候,需要使用modify选项,别四个的添加用add就可以。

6. 每个表都有主外键

7. 客户的姓名不能为空    (增加客户名字为不为空)alter table sp modify spname not null;

8. 单价必须大于0,购买数量必须在130之间

电话不能重复          (增加身份证也不重复)alter table kh add constraint card unique (cardid);

9. 

10. 客户的性别必须是男或者女,默认是男

增加客户的地址在 海口、琼海、文昌、三亚、陵水等地。)alter table kh add constraint addresscheck check(khaddress in('海口'));

 

 

 

 

删除约束

当不需要约束条件的时候就可以把约束删除。

Alter table 表名字 drop constraint约束名称。

在删除主键约束的时候,可能有错误:

Alter table 表名  drop primary key

这是因为在这里如果两张表存在主从关系,那么在删除约束的时候,必须带 cascade 选项

Alter table 表明 drop primary key cascade;

 

 

显示约束信息

1.显示约束信息

 

通过查询数据字典试图 user_constraint 可以显示当前所有约束信息。

Select constraint_name,constraint_type,status,validated from user_constraints

Where table_name=’表名字

2.显示约束列

通过查询数据字典试图user_cons_columns,可以显示约束所对应的表列信息

Select column_name ,position  from  user_cons_columns where constraint_name=’约束名

3.采用图形界面直接使用工具查看。

 

 

 

列级定义

列级定义是在定义列的同时就直接定义了约束条件

create table sp(spid char(8) primary key,

注意not null 只能定义在列上。

表级定义

定义好了表之后再进行定义约束条件

Create table sa(sa_id  number(8),sa_name varchar2(30),sp_id  number(5), constaint aa primary key (sa_id), constaint bb foreign key (sp_id));