数据完整性
数据库不仅仅是存储数据,它也必须保证所保存的数据的正确性。如果数据不正确或不一致,那么该数据的完整性可能会遭到破坏,从而给数据库本身的可靠性带来意想不到的问题。
为了维护数据库中的数据完成性,在创建表时通常需要指定一些约束。通过表中的字段(列)定义约束,就可以防止非法数据的插入问题.对约束的定义可以再create table语句中进行,也可以在alter table语句中进行。
什么是约束呢?
约束是表级的强制规定.根据约束的作用域,约束又可分为表级约束和列级约束两种。
列级约束是指是字段定义的一部分,只能够应用在一个列上.
表级约束是指独立于列的定义,可以应用于一个表中的多个列上。
在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
Not null
特点如下:
为字段定义not null 约束后,该字段不能为null值
Not Null约束只能在列级定义
在定义一个表中可以有多个not Null
unique
特点如下:
如果为字段定义了unique约束,该字段不能够包含重复值
unique约束既可以在列级定义,也可以在表级定义。
在oracle系统中被定义的unique约束会自动建立一个唯一的索引。
同一个字段既可以在其上定义为not null 也可以建立unique约束,(为某个字段可以添加多个约束),
注意:如果在一个字段仅定义了unique约束,则该字段可以包含多个null值
Unique主要的目的是:是在保证主键列外,其它列的唯一性。
primary key
特点如下:
定义为primary key的字段或字段组中不能包含重复值,并且不能为null值.(即满足唯一性,不能为空)
在一个表中只能定义一个primary key的约束
Oracle会自动为具有primarykey约束的字段添加一个唯一的索引,以及一个not null约束
foreign key
特点如下:
被定义了foreign key约束的字段的取值只能为相关表中引用的字段的值或null值。
foreign key约束既可以在列级定义,也可以在表级定义。
定义了foreign key约束的外键字段和被引用的主键字段可以在同一张表中,这种情况称为:’自引用’(构成了自关联关系)
对于同一个字段可以同时定义为foreign key约束和not null约束。
注意:外键的类型、尺寸等一定要与主键完全一致。
备注:
在oracle中级联删除有如下三值:
no action 在删除一方的情况下,对多方不进行任何操作.(不能删,删的情况会出现, 违反完整约束条件的异常信息)
cascade
在删除一方的时,会把多方所有与1方关联的数据删除掉。
set null
在删除一方的时,会把多方所有与1方关联的数据的字段值设置为null(注意:该字段必须允许为null 否则的话会出现无法更新***为 NULL)。
4、check
check约束是所有约束中最灵活的约束,也是最复杂的约束,check约束检查输入到表中的数据值来维护域的完整性,即检查输入的每一个数据,只有符合条件的数据才允许输入到表中.check约束有如下特点:
在check约束的表达式中,必须引用表中一个或多个字段,并且表达式的运算结果必须是一个布尔值.
Check约束即可以在列级定义,也可以在表级定义
对于同一个字段可以定义多个check约束,而且对于同一个字段可以定义check约束和not null约束。
综合案例:
学生信息表
用户名,用户密码,用户电话,用户邮箱,用户地址.
教师名称,教师性别,教师职务,教师年龄
——————————————————————————————
分析:满足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(
2 sname varchar2(20) primary key,
3 stel varchar2(11) not null,
4 semail varchar2(40),
5 saddress varchar2(50)
6 );
Table created
SQL> create table teacher(
2 tname varchar2(20) primary key,
3 tsex varchar2(2),
4 ttitle varchar2(40),
5 tage number(3) check(tage<100 and tage>20)
6 );
Table created
SQL> create table stear(
2 sid number(10) primary key,
3 tname varchar2(20) references teacher(tname),
4 sname varchar2(20) references stu(sname)
5 );
Table created
//查询约束条件
SQL> select * from user_constraints;
//查询被约束的列
SQL> select * from user_cons_columns;
分享到:
相关推荐
### Oracle经典教程1——走进Oracle #### Oracle简介 Oracle是一种基于对象的关系型数据库管理系统,它由美国甲骨文公司开发并维护。Oracle数据库系统因其高度可靠性和强大的数据处理能力而闻名,广泛应用于各种...
### Oracle经典教程6——Oracle应用于.NET平台 #### 一、回顾ADO.NET ADO.NET(ActiveX Data Objects .NET)是一套面向对象的类库集合,主要用于.NET Framework中的应用程序与各种数据源进行交互。通过ADO.NET,...
《Oracle数据库课程设计——学生考勤系统的Oracle实现》是一份详细的报告,主要涵盖了设计和实现一个基于Oracle数据库的学生考勤管理系统的过程。这份报告的核心在于利用Oracle数据库技术来满足高校学生考勤管理的...
### Oracle经典教程2——SQL数据库操作和查询 #### 1. SQL简介 SQL,即结构化查询语言(Structured Query Language),是一种专为管理和操作关系型数据库设计的标准编程语言。通过SQL,用户能够有效地进行数据存取...
这个“Oracle系统培训课件——资料包(7个ppt)”提供了全面了解Oracle系统的宝贵资源,旨在帮助学习者掌握Oracle的基础知识、进阶技能以及实际操作经验。以下是对每个PPT可能涵盖的关键知识点的详细解读: 1. **...
接着,创建了两个示例表——“goods”(商品表)和“gong”(供应商表),其中定义了字段和约束,如主键约束和非空约束。这展示了如何设计和分析数据库表结构以满足业务需求。 最后,通过SELECT语句从DBA_...
在本篇Oracle数据库课程设计中,我们将探讨如何利用Oracle数据库技术实现一个学生考勤系统。这个系统旨在满足不同用户群体的需求,包括学生、教师、班主任、院系领导、学校领导以及系统管理员。以下是关于该系统的...
在Oracle数据库应用开发中,表空间与数据库模式对象的设计是至关重要的部分,它们构成了数据库的基础架构。本实验报告将深入探讨这些概念,并通过实际操作来掌握相关技能。 首先,了解Oracle数据字典,它是由前缀...
在Oracle数据库的学习中,第三天的内容主要涵盖了字符类型、数值类型、日期类型以及表的约束。下面我们将逐一详细探讨这些知识点。 首先,我们来看字符类型。Oracle提供了三种基本的字符类型:`CHAR`、`VARCHAR`和`...
"Oracle 实用教材———web版"显然是一本专为初学者设计的教程,旨在通过Web方式进行Oracle 9i数据库的学习和实践。Oracle 9i是Oracle公司推出的第九个主要版本,它在功能上进行了许多优化和增强,尤其是在互联网...
需要注意的是,只有非空约束能够被复制到新表中,其他的约束不会自动迁移。 接着,我们学习了DML,包括对表的增、删、改操作。`UPDATE`语句用于修改表中的数据,例如,可以单独或同时更新`sage`和`sname`字段。`...
表可以通过各种约束来规范数据,如非空约束、主键约束、外键约束、唯一约束和检查约束。 4. **物理存储结构**:Oracle数据库的物理存储主要包括**数据文件(Datafiles)**、**控制文件(Control files)**和**日志...
### Oracle新手入门指导之五——Oracle约束 #### 约束概述 在Oracle数据库中,约束是一种用于确保数据完整性的机制。它可以帮助我们定义表中的列必须满足的规则,从而确保数据的一致性和准确性。Oracle提供了多种...
本课程“MLDN魔乐科技_Oracle课堂17_约束”聚焦于Oracle数据库中的一个重要概念——约束,它是确保数据完整性和一致性的关键机制。通过这个课程,我们可以深入理解Oracle数据库中的各种约束类型及其应用。 首先,...
"MLDN魔乐科技JAVA培训_Oracle课堂17_约束.rar" 这个标题和描述都指向一个关于Java编程和Oracle数据库的教育课程,具体聚焦在第17课的内容——“约束”。这个课程可能由MLDN(魔乐科技)提供,是一个专业的JAVA培训...
2. 一致性(Consistency):事务完成后,数据库必须保持一致性状态,即事务执行前后,数据都满足所有的完整性约束,确保数据的准确无误。 3. 隔离性(Isolation):在并发环境中,事务的执行独立于其他事务,避免了...
触发器能够帮助数据库管理员和开发者实现复杂的数据完整性约束,以及在数据库中执行自定义的业务逻辑。 在【例1】中,我们看到了一个替代触发器(INSTEAD OF trigger)的例子。替代触发器主要用于处理对视图的DML...
**九、函数** 函数用于在SQL语句中执行特定的计算或操作。 1. **系统函数** - 字符函数:如LEN、UPPER、LOWER等。 - 数值函数:如SUM、AVG、MIN、MAX等。 - 时间函数:如DATE、NOW、YEAR等。 - NULL函数:处理...
1. ORA-00001: 违反唯一约束条件 - 当尝试插入或更新的数据违反了表中定义的唯一键约束时,会出现此错误。这意味着数据库中已经有相同的关键值存在。 2. ORA-00017: 请求会话以设置跟踪事件 - 在尝试设置一个跟踪...
### 数据移植——概念以及Oracle移植方法 #### 数据移植的概念 数据移植是指将数据从一个数据库系统迁移到另一个数据库系统的过程。这一过程不仅涉及到数据的复制,还包括数据结构、索引、约束条件等元数据的迁移...