oracle---数据完整性和约束
来源:互联网 发布:java init和cinit 编辑:程序博客网 时间:2024/04/30 08:35
数据的完整性
用于确保数据库数据遵从一定的商业和逻辑规则,比如数据库中存储的是林木的信息,如果包含性别则不符合此要求。
数据完整性可以使用约束、触发器、应用程序(过程,函数)三种方式来实现。
这三种方法中,因为约束易于维护,并且有最好的性能,所以作为维护数据完整性的首选。
约束有5种
not null--------非空,必须提供数据
unique----------唯一,不能重复,可以为null
primary key-----主键,不能重复且不为空,用于唯一的标示表行的数据,一张表只能有1个主键,但是可以有多个unique。联合主键:意思是多列一起做主键,比如mesh+id
foreign key-----外键,定义主表和从表之间的关系,外键约束要定义在从表上,主表必须有主键约束或是unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在,或是为null。
check-----------检查,比如要求性别必须是男或女。
create table goods(
goodsId char(8) primary key,
goodsName varchar2(40),
unitprice number(10,2) check(unitprice>0),
category varchar2(8),
provider varchar2(40)
)
create table cumtomer(
customerId char(8) primary key,
name varchar2(50) not null,
address varchar2(50),
email varchar2(50) unique,
sex char(2) default '男' check(sex in('男','女')),
cardId char(18)
)
如果是外键,需要保证字段类型和长度与主键一致
create table purchase(
customerId char(8) references costomer(custormerId),
goodsId char(8) references goods(goodsId),
nums number(3) check (nums between 1 and 30)
)
alter table 可以修改表结构,增加约束
not null 使用modify
其他约束使用add即可
alter table goods modify goodsName not null;
alter table customer add constraint aaa1 unique(cardId); aaa1是约束的名称,自己命名
alter table customer add constraint aaa1 check(address in('朝阳','海淀','东城','西城'));
删除约束
alter table 表名 drop constraint 约束名称;(当时起的约束名称)
删除主键约束时,可能有错误,因为如果在2张表存在主从关系时,在删除主表的主键约束时,必须带上caseade选项(级联),如像:
alter table 表名 drop primary key caseade;
显示约束信息
通过查询数据字典视图user_constraints,可以显示当前用户的所有约束的信息
select constraints_name ,constraints_type ,status,validated from user_constraints where table_name='表名';
显示约束列
通过查询数据字典视图user_cons_columns,可以显示约束所对应的表列信息
select column_name ,position from user_cons_columns where constraint_name='约束名';
也有更简单容易的方法,直接用pl/sql 查看即可。
列级定义,在定义列的同时定义约束
如
create table department(dept_id number(2) constraint sss1 primary key,
name varchar2(12),
loc varchar2(12)
);
constraint sss1 primary key 和primary key 效果是一样的,如果简写,则程序会分配一个随机的名字
表级定义,指在定义了所有的列过后,再定义约束。注意,not null只能在列级上定义
如
create table emp(
emp_id number(4),
name varchar2(15),
dept_id number(2),
constraint sss1 primary key(emp_id),
constraint sss2 foreign key(dept_id) references department(dept_id)
);
用于确保数据库数据遵从一定的商业和逻辑规则,比如数据库中存储的是林木的信息,如果包含性别则不符合此要求。
数据完整性可以使用约束、触发器、应用程序(过程,函数)三种方式来实现。
这三种方法中,因为约束易于维护,并且有最好的性能,所以作为维护数据完整性的首选。
约束有5种
not null--------非空,必须提供数据
unique----------唯一,不能重复,可以为null
primary key-----主键,不能重复且不为空,用于唯一的标示表行的数据,一张表只能有1个主键,但是可以有多个unique。联合主键:意思是多列一起做主键,比如mesh+id
foreign key-----外键,定义主表和从表之间的关系,外键约束要定义在从表上,主表必须有主键约束或是unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在,或是为null。
check-----------检查,比如要求性别必须是男或女。
create table goods(
goodsId char(8) primary key,
goodsName varchar2(40),
unitprice number(10,2) check(unitprice>0),
category varchar2(8),
provider varchar2(40)
)
create table cumtomer(
customerId char(8) primary key,
name varchar2(50) not null,
address varchar2(50),
email varchar2(50) unique,
sex char(2) default '男' check(sex in('男','女')),
cardId char(18)
)
如果是外键,需要保证字段类型和长度与主键一致
create table purchase(
customerId char(8) references costomer(custormerId),
goodsId char(8) references goods(goodsId),
nums number(3) check (nums between 1 and 30)
)
alter table 可以修改表结构,增加约束
not null 使用modify
其他约束使用add即可
alter table goods modify goodsName not null;
alter table customer add constraint aaa1 unique(cardId); aaa1是约束的名称,自己命名
alter table customer add constraint aaa1 check(address in('朝阳','海淀','东城','西城'));
删除约束
alter table 表名 drop constraint 约束名称;(当时起的约束名称)
删除主键约束时,可能有错误,因为如果在2张表存在主从关系时,在删除主表的主键约束时,必须带上caseade选项(级联),如像:
alter table 表名 drop primary key caseade;
显示约束信息
通过查询数据字典视图user_constraints,可以显示当前用户的所有约束的信息
select constraints_name ,constraints_type ,status,validated from user_constraints where table_name='表名';
显示约束列
通过查询数据字典视图user_cons_columns,可以显示约束所对应的表列信息
select column_name ,position from user_cons_columns where constraint_name='约束名';
也有更简单容易的方法,直接用pl/sql 查看即可。
列级定义,在定义列的同时定义约束
如
create table department(dept_id number(2) constraint sss1 primary key,
name varchar2(12),
loc varchar2(12)
);
constraint sss1 primary key 和primary key 效果是一样的,如果简写,则程序会分配一个随机的名字
表级定义,指在定义了所有的列过后,再定义约束。注意,not null只能在列级上定义
如
create table emp(
emp_id number(4),
name varchar2(15),
dept_id number(2),
constraint sss1 primary key(emp_id),
constraint sss2 foreign key(dept_id) references department(dept_id)
);
0 0
- oracle---数据完整性和约束
- oracle数据完整性约束
- Oracle 数据完整性,约束
- Oracle数据完整性和约束性
- Oracle中数据完整性约束
- Oracle中数据完整性约束
- Oracle中数据完整性约束
- oracle数据的完整性约束
- oracle完整性约束和索引
- mysql数据完整性和约束
- mysql数据完整性和约束
- Oracle数据完整性约束常用操作
- 插入数据违反完整性约束(oracle)
- Oracle维护数据完整性——约束
- Oracle(14)数据完整性约束
- Oracle常用数据类型和完整性约束
- 索引和数据完整性约束的总结
- sql2005数据完整性之约束和规则
- Excel:将包含某列部分数据的另一个表格中其它列拷贝至当前表格
- Oracle数据库查询条件使用三元表达式
- 告诉你为什么数据要取对数
- EL表达式的基础用法
- Qt--信号与槽机制
- oracle---数据完整性和约束
- Android中的java基础(二)——装箱与拆箱及不同基本类型的比较(类型转换)
- 错误代码 1045 Access denied for user 'root'@'localhost' (using password:YES)解决办法
- 初读小程序
- poj 1191 棋盘分割(dp)
- 在Oracle Solaris 操作系统下安装Oracle 数据库的必看文章
- eclipse maven插件问题:error occurred while automatically activating bundle org.eclipse.m2e.core.ui (525)
- c#reportViewer1报表创建与使用
- TMS320F28335之外部接口与CPLD通信问题