`
yinghuayu1324117
  • 浏览: 69637 次
  • 性别: Icon_minigender_2
  • 来自: 保定
文章分类
社区版块
存档分类

oracle笔记(十八)数据完整性约束

阅读更多

数据完整性

   数据库不仅仅是存储数据,它也必须保证所保存的数据的正确性。如果数据不正确或不一致,那么该数据的完整性可能会遭到破坏,从而给数据库本身的可靠性带来意想不到的问题。

为了维护数据库中的数据完成性,在创建表时通常需要指定一些约束。通过表中的字段()定义约束,就可以防止非法数据的插入问题.对约束的定义可以再create table语句中进行,也可以在alter table语句中进行。

 

什么是约束呢?

   约束是表级的强制规定.根据约束的作用域,约束又可分为表级约束和列级约束两种。

列级约束是指是字段定义的一部分,只能够应用在一个列上.

表级约束是指独立于列的定义,可以应用于一个表中的多个列上。

oracle系统中定义约束时,通过constraint关键字为约束命名,如果用户没有为约束指定名称,系统会自动建立默认的名称。

 

总结:

l       作用范围:列级约束只能作用在一个列上,而表约束可以作用在多个列上(当然表约束也可以作用在一个列上)。

l       定义方式:列约束必须跟在列的定义里后面,表约束不与列一起,而是单独定义。

l       非空(not null) 约束只能定义在列上

 

 

备注:在定义约束时,可以通过指定enabledisable关键字将约束的初始状态设置为激活或禁用状态,默认是激活状态。

 

定义约束的语法格式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

2、            unique

特点如下:

*        如果为字段定义了unique约束,该字段不能够包含重复值

*        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中级联删除有如下三值:

1、            no action 在删除一方的情况下,对多方不进行任何操作.(不能删,删的情况会出现, 违反完整约束条件的异常信息

2、            cascade 在删除一方的时,会把多方所有与1方关联的数据删除掉。

3、            set null在删除一方的时,会把多方所有与1方关联的数据的字段值设置为null(注意:该字段必须允许为null 否则的话会出现无法更新*** NULL)

5、            check 

check约束是所有约束中最灵活的约束,也是最复杂的约束,check约束检查输入到表中的数据值来维护域的完整性,即检查输入的每一个数据,只有符合条件的数据才允许输入到表中.check约束有如下特点:

*          check约束的表达式中,必须引用表中一个或多个字段,并且表达式的运算结果必须是一个布尔值.

*          Check约束即可以在列级定义,也可以在表级定义

*          对于同一个字段可以定义多个check约束,而且对于同一个字段可以定义check约束和not null约束。

综合案例:

  学生信息表

      用户名,用户密码,用户电话,用户邮箱,用户地址.

      教师名称,教师性别,教师职务,教师年龄

      ——————————————————————————————

分析:满足1NF范式(属性不可再分)

      满足2NF范式(非主属性必须完全依赖于任一候选键)

     用户名->用户密码,用户电话,用户邮箱,用户地址.

stusname,stel,semail,saddress

     用户名—> 教师名称

     教师名称—>用户名

  stearsid,tname,sname

教师名称—>教师性别,教师职务,教师年龄

Teachertname,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> commit;

//查询约束条件

SQL> select * from user_constraints;

//查询被约束的列

SQL> select * from user_cons_columns;

6、            约束的状态

oracle系统中,约束具有如下两种状态:

1)       激活状态(enable)在激活状态下对表进行操作时,如果操作与约束规则冲突,则操作被取消

2)       禁用状态(disable)在禁用状态下对表进行操作时,即使操作与约束规则冲突,操作也会得到执行

A.       一般为了保证数据库的完整性,表的约束为激活状态,但是,有些特殊的操作(使用sql * loader从外部数据源向表中导入大量数据时,为了保证操作正常运行,常需要将一些约束改成禁止状态,而在操作后要将约束该成激活状态 )

B.       在使用create tablealter table语句定义约束时,默认情况下约束状态为激活状态

C.       在使用disable关键字时约束的初始约束为紧张状态。

D.       alter table语句中使用disable关键字可以将激活状态切换到禁止状态

E.       使用带modify子句的alter table语句可以改变约束状态

 

分享到:
评论

相关推荐

    MLDN最经典的ORACLE笔记

    事务管理是数据库操作的核心,Oracle提供了ACID(原子性、一致性、隔离性和持久性)特性来保证数据的完整性和一致性。此外,Oracle的备份与恢复机制,如RMAN(恢复管理器)和数据泵,对于数据安全和业务连续性至关...

    oracle 数据库约束笔记

    Oracle 数据库约束笔记 Oracle 数据库约束是一种机制,用于确保...Oracle 数据库约束是确保数据完整性和一致性的重要机制。通过定义合适的约束,我们可以确保数据的正确性和一致性,从而提高数据库的可靠性和稳定性。

    oracle_sql笔记

    事务处理包括提交(COMMIT)、回滚(ROLLBACK)和保存点(SAVEPOINT),确保数据的一致性和完整性。 十、性能优化 Oracle提供了多种性能优化手段,如索引优化、查询优化、分区技术、物化视图、绑定变量等。理解并运用这些...

    Oracle数据库笔记大全

    - **实体完整性约束**: 确保表中无重复记录,通常通过主键实现。 - **参照完整性约束**: 控制表间关联,如外键约束,防止无效引用。 5. **Oracle数据库实例与网络服务名**: - **数据库实例**: 运行在数据库文件...

    韩顺平oracle视频笔记

    - **外键**:`FOREIGN KEY`,确保表之间的参照完整性。 - **唯一**:`UNIQUE`,确保某列值的唯一性。 - **非空**:`NOT NULL`,确保某列值不能为空。 - **检查**:`CHECK`,限制列值必须满足某个条件。 #### 11. ...

    oracle约束和索引笔记

    约束是Oracle数据库中用于确保数据完整性的规则。它们分为以下几种类型: - **非空约束(NOT NULL)**: 非空约束不允许字段值为NULL,确保该字段始终有值。 - **唯一约束(UNIQUE)**: 这种约束保证字段中的每个...

    Oracle数据库课堂笔记

    约束是确保数据完整性的规则,包括NOT NULL(非空约束)、UNIQUE(唯一约束)、PRIMARY KEY(主键约束)、FOREIGN KEY(外键约束)和CHECK(检查约束)。它们在数据插入和更新时自动执行,防止不符合规则的数据进入...

    oracle 韩顺平笔记 传智播客

    1. **约束与数据完整性**:使用主键、外键、唯一性约束等保持数据一致性,避免冗余和错误。 2. **索引优化**:创建和管理索引,提升查询速度,但需平衡对写入操作的影响。 3. **权限管理**:分配和撤销对象权限、...

    2011MLDN李兴华Oracle课堂笔记PDF档

    5. **04-习题讲解2及表的创建、约束.pdf**:这部分可能讲解如何在Oracle中创建表,包括字段定义、数据类型选择,以及约束的设定,如主键、外键、唯一性约束等。 6. **05-视图、索引、备份、同义词、设计范式、设计...

    oracle 数据仓库指南阅读笔记

    在数据仓库中,设置正确的约束可以帮助维护数据的完整性和一致性,尤其是在进行数据加载和更新时。 这些笔记提供了深入理解 Oracle 数据仓库设计与实现的宝贵资源,涵盖了从基础概念到高级技术的多个方面。对于希望...

    Oracle 笔记.rar

    以上只是Oracle数据库知识体系的冰山一角,Oracle笔记中可能涵盖了这些内容的详细解释和实例演示,对于学习和理解Oracle数据库的操作和管理非常有帮助。在实际工作中,掌握这些知识能够帮助数据库管理员和开发者更...

    韩顺平 oracle 课堂笔记

    #### 十一、Oracle 约束与数据完整性 约束是维护数据完整性的有效手段,包括主键(primary key)、外键(foreign key)、唯一(unique)、非空(not null)等。韩顺平的笔记中详细解释了各种约束的作用及其在实际场景中的...

    涂抹Oracle—三思笔记之一步一步学Oracle

    - 表设计:理解数据完整性,如何设计合理的表结构,包括主键、外键和约束。 - 索引优化:学习各种类型的索引(B树、位图、函数索引等),以及如何选择和使用它们来提高查询性能。 5. **存储管理** - 表空间管理...

    oracle笔记(韩顺平oracle视频教学整理)

    11. 约束:讲解了数据完整性约束,如主键、外键、唯一性约束和检查约束的使用。 12. Oracle索引、权限:包括索引的创建和管理,以及用户权限的分配。 13. 角色:介绍了在Oracle中如何使用角色来简化权限管理,将...

    Oracle 笔记.docx

    - **约束**:确保数据完整性,如主键、外键、唯一性等。 - **查询**:单表查询、多表查询、子查询等。 - **数据库对象**: - **视图**:虚拟表,根据SQL查询结果生成。 - **序列**:自动生成连续数字的特殊对象...

    oracle学习笔记-入门基础

    这种索引对于保持数据的完整性至关重要,但插入和更新操作会因索引的维护而产生额外的开销。 组合索引则是在两个或多个列上创建的索引,适用于那些列经常一起出现在WHERE条件中的情况。列的顺序会影响索引的效率,...

    韩顺平oracle视频笔记五

    1. "修改约束条件.bmp" - 这可能涉及到Oracle中的数据完整性约束,如NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY等,以及如何使用ALTER TABLE语句进行修改。 2. "2.bmp"、"1.bmp"、"3.bmp" - 文件名未明确指出具体...

    oracle笔记(存储过程函数触发器游标流程控制等)

    触发器常用于实现复杂的业务规则和数据完整性约束。 3. **游标**:游标允许在结果集中逐行处理数据,对于迭代操作非常有用。在Oracle中,游标可以显式或隐式声明,它们是PL/SQL编程中的重要工具。 4. **流程控制**...

Global site tag (gtag.js) - Google Analytics