oracle中数据完整性的示例分析
小编给大家分享一下oracle中数据完整性的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
1.数据的完整性简介
就是正确性、准确性,包含三种:实体完整性、参照完整性、
用户自定义完整性。Oracle中主要通过约束、触发器、过程函数
实现的。以下内容讲通过约束实现数据完整性。
举例两个表:
学生(学号,姓名,系编号)
系(系编号,系名称)
员工(编号,姓名,出生日期,工作日期)
那么:
学号是主键列,其值不能错误,如不能负值,这就是实体完整性;
系编号是外键,学生表的系编号参照系表,也就是说学生表的系编号的值必须在系表的系编号的值范围内【或者为空】,这就是参照完整性;
员工表的出生日期一定需要小宇工作日期,这就是用户自定义完整性。
2.维护数据的完整性,有notnull、unique、check、primarykey、foreignkey五种。
notnull例如学生的姓名;unique例如学生的学号;primarykey主键、foreignkey外键、check可以按照用户要求,进行自动检查。
unique不可以重复,但是可以为空。
primarykey不可以重复,也不能为空。
一个表只能一个primarykey,却可以多个unique。
notnull只能在列内定义,其他4种约束可以在列定义结束后,在表内定义。
notnull示例(这里的notnull约束由系统自动起名):
createtableyg2(bhnumber(4)notnull,xmvarchar2(8));
check示例:
createtableyg3(bhnumber(4)notnullcheck(bh>0andbh<10000),xmvarchar2(8));
unique示例:
createtableyg4(部门号number(4)notnull,部门内号number(4),xmvarchar2(8),unique(部门号,部门内号));
default的使用
createtablegz_新员工(bhnumber(4),xmvarchar2(8),gznumber(10)default1000);//适用于没有向列显式的指定数值的情况。
primarykey示例(此列不允许为空,而且ORACLE会自动为主键列创建索引,这里的primarykey约束由用户显式起名):
createtablestudent(xhnumber(6)constraintcode_pkprimarykey,xmvarchar2(20));
foreignkey示例(实现两个表之间参照与被参照的关系,外键只能取主键已经有的值,这里的foreignkey由系统自动起名):
createtableaddress(xhnumber(8),zzvarchar2(50),foreignkey(xh)referencesstudent(xh));
试验primarykey和foreignkey约束:
insertintostudentvalues(1,'张一');
insertintoaddressvalues(1,'郑州');
insertintoaddressvalues(2,'郑州');
(3)用户的约束在user_constraints表、和user_cons_columns表中
select*fromuser_constraints;
实践练习题目:
问题:
建立2个表,一个是StudentInformatino(学号sno,姓名
sname,年龄sage,性别smale,系编号
deptNo),一个是department(系编号deptno,
系名称deptname)。
要求:
每个表有主键。
StudentInformation表建立外键。
学生的姓名不能为空。
学生的年龄要在18到50之间。
学生的性别必须是男女之一,默认是男。
StudentInformation表的deptno列,要参照department表的
deptno列。
3.2给已有的表添加约束:
除了添加notnull需要使用modify命令,其他都是类似altertabletablenameaddCONSTRAINTS的方式。
上面例子,允许stuInfo中的姓名可以为空:altertablestuinfomodifysnamenull;
允许stuInfo中的姓名不能重复:altertablestuinfoaddconstraintssname_uniqueunique(sname);
要求department的系名称列的内容,必须大于4个字符长度:altertable
departmentaddconstraintsdeptName_checkcheck(length(deptName)>4);
3.3删除约束:
altertable表名dropconstraint约束名;
altertabledepartmentdropconstraintdeptName_check;--删除刚才建立的department表上的deptName_check约束
删除主键语句:altertable表名dropprimarykey;
如果出错:ORA-02273:此唯一/主键已被某些外键引用,可以:altertabledepartmentdropprimarykeycascade;
如果删除一个主键被引用的表,可以:droptable表名cascadeconstraints;
看完了这篇文章,相信你对“oracle中数据完整性的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。