维护数据的完整性(主键,外键,唯一等等)
索引,建立索引(速度快)
管理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,购买数量必须在1到30之间
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,购买数量必须在1到30之间
电话不能重复 (增加身份证也不重复)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));