Oracle数据的完整性
用于确保数据遵从一定的商业和逻辑规则,在Oracle中数据的完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现。
Oracle中约束有如下五种:
not null插入的时候不能为空
unique不能重复,但是可以为空
primary key不能重复,而且不能为null
(一个表最多只能有一个主键,但是可以有多个unique)
foreign key外键
check用于强制数据必须满足的条件,假定sal列值在1000-2000之间如果不在就会出错
商店售货系统表设计案例
create table goods( goodsId char(36) primary key, goodsName varchar2(36), unitprice number(10,2) check (unitprice>0), category varchar2(36), provider varchar2(36) ); create table customer( customerId char(36) primary key, name varchar2(36) not null, address varchar2(100), email varchar2(50) unique, sex char(2) default '男' check (sex in('男','女')), cardId char(18) ); create table purchase( customerId char(36) references customer(customerId), goodsId char(36) references goods(goodsId), nums number(5) check(nums between 1 and 30) );
备注:在使用外键的时候,一定要保证外键一定是另外一张表的主键,如果另外一张表没有声明为主键则创建表会报错的
商品名称不能为空 alter table goods modify goodsName not null; 增加身份证不能重复 alter table customer add constraint cardunique unique(cardId) 增加客户的住址只能是"海淀","朝阳","东城","西城","通州"等 alter table customer add constraint addresscheck check(address in('东城','西城')) 删除约束 alter table customer drop constraint addresscheck; alter table 表明 drop primary key cascade; 列级定义(在定义列的同时定义约束) create table department( dept_id number(2) constraint pk_department primary key, name varchar2(12), loc varchar2(12) ); 表级定义(定义了所有列后再定义约束,not null只能在列级定义) create table employee( emp_id number(4), name varchar2(15), dept_id number(2), constraint pk_employee primary key(emp_id), constraint fk_department foreign key(dept_id) references department(dept_id) );