Oracle数据完整性学习笔记
来源:互联网 发布:淘宝客公众号系统搭建 编辑:程序博客网 时间:2024/06/10 05:40
1、数据完整性
数据库不仅仅是存储数据,它也必须保证所保存的数据的正确性。如果数据不正确或不一致,那么该数据的完整性可能会遭到破坏,从而给数据库本身的可靠性带来意想不到的问题。
为了维护数据库中的数据完成性,在创建表时通常需要指定一些约束。通过表中的字段(列)定义约束,就可以防止非法数据的插入问题.对约束的定义可以再create table语句中进行,也可以在alter table语句中进行。
2、约束
约束是表级的强制规定.根据约束的作用域,约束又可分为表级约束和列级约束两种。
- 列级约束是指是字段定义的一部分,只能够应用在一个列上
- 表级约束是指独立于列的定义,可以应用于一个表中的多个列上
在oracle系统中定义约束时,通过constraint关键字为约束命名,如果用户没有为约束指定名称,系统会自动建立默认的名称。
总结:
作用范围:列级约束只能作用在一个列上,而表约束可以作用在多个列上(当然表约束也可以作用在一个列上)。
定义方式:列约束必须跟在列的定义里后面,表约束不与列一起,而是单独定义。
非空(not null) 约束只能定义在列上
备注:在定义约束时,可以通过指定enable或disable关键字将约束的初始状态设置为激活或禁用状态,默认是激活状态。
定义约束的语法格式1:
CREATE TABLE [schema.]table (column datatype [DEFAULT expr] [column_constraint], ... [table_constraint][,...]);
列级约束:
column [CONSTRAINT constraint_name] constraint_type,
表级约束
column,... [CONSTRAINT constraint_name] constraint_type (column, ...),
约束的分类为:
• NOT NULL
• UNIQUE
• PRIMARY KEY
• FOREIGN KEY
• CHECK
(1).Not null
特点如下:
为字段定义not null 约束后,该字段不能为null值
Not Null约束只能在列级定义
在定义一个表中可以有多个not Null(一个表多个列同时定义not null)
(2).unique
特点如下:
如果为字段定义了unique约束,该字段除NULL值外不能够包含重复值
unique约束既可以在列级定义,也可以在表级定义。
在oracle系统中被定义的unique约束会自动建立一个唯一的索引。
同一个字段既可以在其上定义为not null 也可以建立unique约束,(允许在一个列中同时定义多个约束)。
注意:如果在一个字段仅定义了unique约束,则该字段可以包含多个null值
Unique主要的目的是:是在保证主键列外,其它列的唯一性。
(3).primary key
特点如下:
定义为primary key的字段或字段组中不能包含重复值,并且不能为null值.(即满足唯一性,不能为空)
在一个表中只能定义一个primary key的约束
Oracle会自动为具有primarykey约束的字段添加一个唯一的索引,以及一个not null约束
(4).foreign key
特点如下:
被定义了foreign key约束的字段的取值只能为相关表中引用的字段的值或null值。
foreign key约束既可以在列级定义,也可以在表级定义。
定义了foreign key约束的外键字段和被引用的主键字段可以在同一张表中,这种情况称为:’自引用’(构成了自关联关系)
对于同一个字段可以同时定义为foreign key约束和not null约束。
注意:外键的类型、尺寸等一定要与主键完全一致。
备注:
在oracle中级联删除有如下三值:
- no action 在删除一方的情况下,对多方不进行任何操作.(不能删,删的情况会出现, 违反完整约束条件的异常信息)
- cascade 在删除一方的时,会把多方所有与1方关联的数据删除掉
- set null 在删除一方的时,会把多方所有与1方关联的数据的字段值设置为null(注意:该字段必须允许为null否则的话会出现无法更新*为 NULL)
(5).check
check约束是所有约束中最灵活的约束,也是最复杂的约束,check约束检查输入到表中的数据值来维护域的完整性,即检查输入的每一个数据,只有符合条件的数据才允许输入到表中。
check约束有如下特点:
在check约束的表达式中,必须引用表中一个或多个字段,并且表达式的运算结果必须是一个布尔值.
Check约束即可以在列级定义,也可以在表级定义
对于同一个字段可以定义多个check约束,而且对于同一个字段可以定义check约束和not null约束。
3、综合案例
学生信息表
用户名,用户密码,用户电话,用户邮箱,用户地址.
教师名称,教师性别,教师职务,教师年龄
分析:满足1NF范式(属性不可再分)
满足2NF范式(非主属性必须完全依赖于任一候选键)
用户名->用户密码,用户电话,用户邮箱,用户地址.
Stu(sname,stel,semail,saddress)
用户名—> 教师名称
教师名称—>用户名
stear(sid,tname,sname)
教师名称—>教师性别,教师职务,教师年龄
Teacher(tname,tsex,ttitle,tage)
满足3NF(非主属性都不传递依赖于任一候选键)
//创建表的语法同时也给表加约束||或者是创建表之后才用alter语句添加约束条件
//第一步切换到管理员权限 SQL> conn system/root; //第二步创建用户 SQL> create user slj identified by root; //第三步为用户分配角色权限SQL> grant connect,resource to slj;//connect 连接 resources 创建表的权限 详细参考第二次oracle课程 //切换到相应的用户 SQL> conn slj/root; //采用create语句创建表 SQL> create table stu( sname varchar2(20) primary key, stel varchar2(11) not null, semail varchar2(40), saddress varchar2(50) ); Table created SQL> create table teacher( tname varchar2(20) primary key, tsex varchar2(2), ttitle varchar2(40), tage number(3) check(tage<100 and tage>20) ); Table created SQL> create table stear( sid number(10) primary key, tname varchar2(20) references teacher(tname), sname varchar2(20) references stu(sname) ); Table created SQL> commit; //查询约束条件 SQL> select * from user_constraints; //查询被约束的列 SQL> select * from user_cons_columns;
参考文献:redarmy_chen,http://redarmychen.iteye.com/blog/1023112
- Oracle数据完整性学习笔记
- oracle学习 数据完整性
- Oracle笔记之数据完整性
- Oracle学习笔记之数据完整性、索引、权限、角色
- Oracle Database :玩转Oracle学习笔记之(3):维护数据的完整性
- 【Oracle】Oracle数据完整性
- oracle 11g 学习笔记 10_31(2)_维护数据的完整性
- Oracle学习笔记(十八)——维护数据的完整性
- Oracle 数据的完整性
- Oracle之数据完整性
- oracle 数据完整性
- oracle数据完整性
- oracle数据完整性约束
- Oracle 数据完整性,约束
- ORACLE学习之路--管理数据完整性约束
- oracle的学习五:数据的完整性、索引、权限、角色
- 《JavaScript高级程序设计》学习笔记(表单和数据完整性)
- 《JavaScript高级程序设计》学习笔记(表单和数据完整性)
- cocos2dx_lua 2.x 版本 与 3.x 版本 区别 总结
- lua协程的使用列子分析
- JavaScript中地理位置API的使用
- iTOP4412开发板去掉底板上的重力加速
- 正则表达式
- Oracle数据完整性学习笔记
- What is Complex Event Processing? (Part 5)
- 聊聊HTTPS与Android安全
- SQL Server 数据库备份和还原认识和总结(一)
- 玩命牛的成长记录(二十三)——文字
- 常用的属性设置
- oc static extern 和const
- OJ第三批——Problem G:C++习题 多重继承
- 河北师大软件学院第18次作业