精华内容
下载资源
问答
  • 数据库完整性约束-创建、修改、删除方法
    2020-12-06 16:22:10

    Mysql

    更多相关内容
  • 数据库完整性约束基础语句,包含对某些属性的特定取值,定义默认对象,定义和绑定规则,创建级联。文档包含代码和截图,方便查看
  • 数据库完整性约束

    千次阅读 2017-04-05 09:19:17
    介绍数据库完整性

    数据库完整性

        数据库完整性(Database Integrity)是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。数据库完整性由各种各样的完整性约束来保证,因此可以说数据库完整性设计就是数据库完整性约束的设计。数据库完整性约束可以通过DBMS或应用程序来实现,基于DBMS的完整性约束作为模式的一部分存入数据库中。通过DBMS实现的数据库完整性按照数据库设计步骤进行设计,而由应用软件实现的数据库完整性则纳入应用软件设计。


    原理

    数据库完整性对于数据库应用系统非常关键,其作用主要体现在以下几个方面:

    1.数据库完整性约束能够防止合法用户使用数据库时向数据库中添加不合语义的数据;
    2.利用基于DBMS的完整性控制机制来实现业务规则,易于定义,容易理解,而且可以降低应用程序的复杂性,提高应用程序的运行效率。同时,基于DBMS的完整性控制机制是集中管理的,因此比应用程序更容易实现数据库的完整性;
    3.合理的数据库完整性设计,能够同时兼顾数据库的完整性和系统的效能。比如装载大量数据时,只要在装载之前临时使基于DBMS的数据库完整性约束失效,此后再使其生效,就能保证既不影响数据装载的效率又能保证数据库的完整性;
    4.在应用软件的功能测试中,完善的数据库完整性有助于尽早发现应用软件的错误。
        数据库完整性约束可分为6类:列级静态约束、元组级静态约束、关系级静态约束、列级动态约束、元组级动态约束、关系级动态约束。动态约束通常由应用软件来实现。不同DBMS支持的数据库完整性基本相同。


    关系模型

        关系完整性的用于保证数据库中数据的正确性。系统在进行更新、插入或删除等操作时都要检查数据的完整性,核实其约束条件,即关系模型的完整性规则。在关系模型中有四类完整性约束:实体完整性、域完整性、参照完整性和用户定义的完整性,其中实体完整性和参照完整性约束条件,称为关系的两个不变性。


    完整性

    实体完整性
        关系数据库的完整性规则是数据库设计的重要内容。绝大部分关系型数据库管理系统RDBMS都可自动支持关系完整性规则,只要用户在定义(建立)表的结构时,注意选定主键、外键及其参照表,RDBMS可自动实现其完整性约束条件。
        (1)实体完整性(Entity Integrity)。实体完整性指表中行的完整性。主要用于保证操作的数据(记录)非空、唯一且不重复。即实体完整性要求每个关系(表)有且仅有一个主键,每一个主键值必须唯一,而且不允许为“空”(NULL)或重复。
        (2)实体完整性规则要求。若属性A是基本关系R的主属性,则属性A不能取空值,即主属性不可为空值。其中的空值(NULL)不是0,也不是空隔或空字符串,而是没有值。实际上,空值是指暂时“没有存放的值”、“不知道”或“无意义”的值。由于主键是实体数据(记录)的惟一标识,若主属性取空值,关系中就会存在不可标识(区分)的实体数据(记录),这与实体的定义矛盾,而对于非主属性可以取空值(NULL),因此,将此规则称为实体完整性规则。如学籍关系(表)中主属性“学号”(列)中不能有空值,否则无法操作调用学籍表中的数据(记录)。

    域完整性
        域完整性(Domain Integrity)是指数据库表中的列必须满足某种特定的数据类型或约束。其中约束又包括取值范围、精度等规定。表中的CHECK、FOREIGN KEY 约束和DEFAULT、 NOT NULL定义都属于域完整性的范畴。

    参照完整性
        参照完整性(Referential Integrity)属于表间规则。对于永久关系的相关表,在更新、插入或删除记录时,如果只改其一,就会影响数据的完整性。如删除父表的某记录后,子表的相应记录未删除,致使这些记录称为孤立记录。对于更新、插入或删除表间数据的完整性,统称为参照完整性。通常,在客观现实中的实体之间存在一定联系,在关系模型中实体及实体间的联系都是以关系进行描述,因此,操作时就可能存在着关系与关系间的关联和引用。
        在关系数据库中,关系之间的联系是通过公共属性实现的。这个公共属性经常是一个表的主键,同时是另一个表的外键。参照完整性体现在两个方面:实现了表与表之间的联系,外键的取值必须是另一个表的主键的有效值,或是“空”值。
    参照完整性规则(Referential Integrity)要求:若属性组F是关系模式R1的主键,同时F也是关系模式R2的外键,则在R2的关系中,F的取值只允许两种可能:空值或等于R1关系中某个主键值。
        R1称为“被参照关系”模式,R2称为“参照关系”模式。
        注意:在实际应用中,外键不一定与对应的主键同名。外键常用下划曲线标出。

    用户定义完整性
        用户定义完整性(User-defined Integrity)是对数据表中字段属性的约束,用户定义完整性规则(User-defined integrity)也称域完整性规则。包括字段的值域、字段的类型和字段的有效规则(如小数位数)等约束,是由确定关系结构时所定义的字段的属性决定的。如,百分制成绩的取值范围在0~100之间等。


    设计阶段
        一个好的数据库完整性设计首先需要在需求分析阶段确定要通过数据库完整性约束实现的业务规则,然后在充分了解特定DBMS提供的完整性控制机制的基础上,依据整个系统的体系结构和性能要求,遵照数据库设计方法和应用软件设计方法,合理选择每个业务规则的实现方式;最后,认真测试,排除隐含的约束冲突和性能问题。基于DBMS的数据库完整性设计大体分为以下几个阶段:
    需求分析
        经过系统分析员、数据库分析员、用户的共同努力,确定系统模型中应该包含的对象,如人事及工资管理系统中的部门、员工、经理等,以及各种业务规则。
        在完成寻找业务规则的工作之后,确定要作为数据库完整性的业务规则,并对业务规则进行分类。其中作为数据库模式一部分的完整性设计按下面的过程进行。而由应用软件来实现的数据库完整性设计将按照软件工程的方法进行。
    概念设计
        概念结构设计阶段是将依据需求分析的结果转换成一个独立于具体DBMS的概念模型,即实体关系图(ERD)。在概念结构设计阶段就要开始数据库完整性设计的实质阶段,因为此阶段的实体关系将在逻辑结构设计阶段转化为实体完整性约束和参照完整性约束,到逻辑结构设计阶段将完成设计的主要工作。
    逻辑设计
        此阶段就是将概念结构转换为某个DBMS所支持的数据模型,并对其进行优化,包括对关系模型的规范化。此时,依据DBMS提供的完整性约束机制,对尚未加入逻辑结构中的完整性约束列表,逐条选择合适的方式加以实现。
    在逻辑结构设计阶段结束时,作为数据库模式一部分的完整性设计也就基本完成了。每种业务规则都可能有好几种实现方式,应该选择对数据库性能影响最小的一种,有时需通过实际测试来决定。



    展开全文
  • 数据库 完整性约束

    千次阅读 2019-05-24 14:57:42
    数据完整性分为四类: 实体完整性:规定表的每一行在表中是惟一的实体。 域完整性:是指表中的列...用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完...

    一. 数据完整性分为四类:

    1. 实体完整性:规定表的每一行在表中是惟一的实体。
    2. 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。
    3. 参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。
    4. 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。

    二. 完整性约束的类型:

    可分为三种类型:与表有关的约束、域(Domain)约束、断言(Assertion)

    1. 与表有关的约束:是表中定义的一种约束。可在列定义时定义该约束,此时称为列约束,也可以在表定义时定义约束,此时称为表约束。
    2. 域约束:在域定义中被定义的一种约束,它与在特定域中定义的任何列都有关系。
    3. 断言:在断言定义时定义的一种约束,它可以与一个或多个表进行关联。

    1. 与表有关的约束:

    包括 列约束(表约束+NOT NULL)和
    表约束(PRIMARY KEY、foreign key、check、UNIQUE)

    (1) not null(非空)约束: 只用于定义列约束。
    语法如下: Colunm_name datatype | domain not null
    实例: create table Employee(emp_id int not null,emp_name varchar(10) not null)

    (2) unique(惟一)约束:用于指明创建惟一约束的列上的取值必须惟一。
    语法如下: Colunm_name datatype | domain unique
    实例: create table EmployeeInfo( … phone char(11) unique )
    除了在定义列时添加unique约束外,也可以将unique约束作为表约束添加。即把它作为表定义的元素。
    语法如下: [CONSTRAINT constraint_name] unique (column1,column2,…)
    实例: create table EmployeeInfo(emp_id int,constraint p_uniq unique(phone))

    (3) primary key(主键)约束:用于定义基本表的主键,起惟一标识作用,其值不能为null,也不能重复,以此来保证实体的完整性。
    语法如下: Colunm_name datatype | domain primary key
    实例: create table EmployeeInfo(emp_id int primary key)
    可以在创建表时,创建主键约束,也可创建表完成以后,创建主键,例如:
    alter table EmployeeInfo
    add constraint e_prim primary key(emp_id)

     

    primary key 与 unique的区别:

    1. 在一个表中,只能定义一个primary key约束,但可定义多个unique约束。
    2. 对于指定为primary key的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于unique所约束的惟一键,则允许为null,只是null值最多有一个。

    (4) foreign key(外键)约束:定义了一个表中数据与另一个表中的数据的联系。
    foreign key约束指定某一个列或一组列作为外部键,其中包含外部键的表称为子表,包含外部键所引用的主键的表称为父表。系统保证,表在外部键上的取值要么是父表中某一主键,要么取空值,以此保证两个表之间的连接,确保了实体的参照完整性。
    语法如下:
    Colunm_name datetype | domain references table_name(column)
    [match full|partial|simple] //注:sqlserver不支持。
    [referential triggered action

    说明:table_name为父表的表名,column为父表中与外键对应的主键值。
    [match full|partial|simple]为可选子句,用于设置如何处理外键中的null值。
    [referential triggered action]可选子句,用于设置更新、删除外键列时的操作准则。
    可以为表的一列或多列创建foreign key 约束,如果为多列创建 foreign key约束,将分别与主表中的相应主键相对应。
    实例:
    create table EmployeeInfo
    (
    emp_id int primary key,
    emp_name varchar(10) not null,
    account char(4) primary key,
    phone char(11)
    address varchar(40) ,
    )
    create table Emp_Sal
    (
    emp_id int ,
    account CHAR(4) ,salary DECIMAL(5,1),
    CONSTRAINT E_SAL FOREIGN KEY(emp_id,account) REFERENCES EmployeeInfo (emp_id,account))
    )

    也可以表创建以后添加到表上。如下:
    alter table Emp_Sal
    add CONSTRAINT E_SAL FOREIGN KEY(emp_id,account) REFERENCES EmployeeInfo (emp_id,account)

    该外键的作用:确保表Emp_Sal的每个emp_id列都对应表EmployeeInfo中相应的emp_id。此时,表EmployeeInfo为父表,而表Emp_Sal为子表。子表的emp_id列参照父表的emp_id列。

    如果想在子表的emp_id 列插入一个值,首先父表的emp_id列必须存在,否则会插入失败。如果想从父表的emp_id删除一个值,则必须无删除子表emp_id列中所有与之对应的值。(注:foreign key 列上的取值可以取null)。

    潜在问题:由于foreign key列上可以取空值,DBMS将跳过对foreign key约束的检查,因此如果插入Emp_Sal如下数据:
    insert into Emp_Sal values(6,null,null) 则插入到Emp_Sal中,但其主表的相关列却不存在。

    解决办法
    (1)将联合外键的列添加not null约束,但这限制了用户的部分操作。
    (2)采用Match子句。(sqlserver不支持).

    更新、删除操作规则
    在删除或更新有primary key值的行,且该值与子表的foreign key中一个或多个值相匹配时,会引起匹配完整性的丧失。
    foreign key创建语法中,提供了可选的on updateon delete子句,也就是上面的[referential triggered action]。可用此保持引用完整性。
    on update/ on delete
    no action | cascade | restrict | set null | set default

    no action :更新或删除父表中的数据时,如果会使子表中的外键违反引用完整性,该动作将被禁止执行。不过在某些条件下,可出现暂时的,但在数据的最终状态中,不能违反外键的引用完整性。

    cascade : 当父表中被引用列的数据被更新或删除时,子表中的相应的数据也被更新或删除。

    restrict :与no action规则基本相同,只是引用列中的数据永远不能违反外键的引用完整性,暂时的也不行。

    set null :当父表数据被更新或删除时,子表中的相应数据被设置成Null值,前提是子表中的相应列允许null值。

    set default :当父表数据被更新或删除时,子表中的数据被设置成默认值。前提是子表中的相应列设置有默认值。

    (5) check(校验)约束:用来检查字段值所允许的范围。
    DBMS每当执行delete,insert或update语句时,都对这个约束过滤。如果为true,则执行。否则,取消执行并提示错误。
    列定义语法如下: Column datetype | domain check(search condition)
    表约束语法如下: constraint constraint_name check(search condition)
    实例如下:
    create table Emp_Sal(constraint validsal check(salary >=1000 and salary<=10000))
     

    2. 域约束:(sqlserver 不支持)

    语法如下:
    create domain domain_name as data type
    [default default_value]
    [constraint constraint_name] check(value condition expression)

    3. 断言约束

    不必与特定的列绑定,可以理解为能应用于多个表的check约束,因此必须在表定义之外独立创建断言。
    语法如下:
    create assertion constraint_name
    check search condition

    例如:
    create assertion name
    check (Emp_Sal.emp_id in(select emp_id from EmployeeInfo where emp_name is not null)

    添加断言后,每当试图添加或修改Emp_Sal表中的数据时,就对断言中的搜索条件求值,如果为false,则取消执行,给出提示

    展开全文
  • MySQL数据库全套视频,带你了解MySQL数据库,免费领取Python自动化学习资料 工具,面试宝典面试技巧
  • ORACLE数据库完整性约束浅析.pdf
  • 基于Oracle的数据库完整性约束分析.pdf
  • 基于SQL Server数据库完整性约束的几点探讨.pdf
  • 基于SQL Server 数据库完整性约束的案例教学研究.pdf
  • 数据库应用软件:第5章 数据库完整性约束.ppt
  • (1)实体完整性约束:指表中行的完整性。主要用于保证操作的数据非空,唯一且不重复。 (2)域完整性约束:指表中列的完整性。是指数据库表中的列必须满足某种特定的数据类型或约束,包括取值范围、精度等规

    数据完整性

    1.数据完整性
    数据表中存在不正确、不准确的数据,数据库 “失去了完整性”

    在这里插入图片描述

    什么是数据完整性?

    **
    数据完整性是指数据库中数据的准确性,从数据表中取得的数据是准确的和可靠的。
    数据完整性的问题大多是由于设计引起的,为了避免上述问题的发生我们应该重视表的前期设计。

    在这里插入图片描述

    数据完整性约束包括以下四个方面:
    (1)实体完整性约束:指表中的完整性。主要用于保证操作的数据非空,唯一且不重复。
    (2)完整性约束:指表中的完整性。是指数据库表中的列必须满足某种特定的数据类型或约束,包括取值范围、精度等规定。
    (3)参照完整性约束:指表与表之间的约束,主要是保证表间数据的一致性
    (4)用户定义完整性约束:指用户根据业务规则自定义一些复杂的约束

    实体完整性约束:要求表中的每一行数据都反映不同的实体,不能存在重复的数据行。

    主键约束

    主键约束:一般情况下,建议为每个表创建一个主键约束
    EG: 学生管理系统

    为学生表设置主键:
    在这里插入图片描述
    因为学号可以唯一识别一行数据,所以将学号设置为主键。
    右击某字段,点击,设置主键
    在这里插入图片描述

    NOTICE:主键的特点 = 非空 + 唯一

    在这里插入图片描述
    当表中有多个字段可以设置为主键时,那么哪个字段可以设置为主键呢?
    在这里插入图片描述
    在学生成绩管理系统中先建三张表
    1.学生表:学号设为主键
    在这里插入图片描述

    2.课程表中课程号设为主键
    在这里插入图片描述

    3.成绩表中,学号和课程号组合设置为主键(选中学号和课程号 右击 设计主键)
    (因为学号和课程号可能是重复的,所以不能单独把学号或者课程号作为为主键,而是把课程号和学号 组合(不可重复)在一起设置为主键。)

    在这里插入图片描述

    主键的特征:

    1.一个表只能有一个主键

    2.一个主键可以由多个字段构成

    3.主键值唯一

    4.主键值不能为空

    展开全文
  • 数据完整性是指数据的正确性、完备性和一致性,是衡量数据库质量...数据库完整性由各式各样的完整性约束来确保,因而可以说数据库完整性规划即是数据库完整性约束的规划。那么,数据库设计的完整性约束表现哪些方面?
  • 数据库 完整性约束定义

    千次阅读 2018-10-22 08:29:29
    1.check约束范围 --建表时定义性别取值为“男或女”默认为“男” --年龄在14到65之间(14,65) -- in (值1,值2,值3...值n) 属于值1到值n其中之一(详见聚集函数) create table Student( Sno Char(7) primary key,-...
  • 一、数据库完整性概述  1.数据库的完整性: ...  DBMS应提供定义数据库完整性约束条件,并把它们存入数据库中。  ②提供完整性检查的方法  检查数据是否满足完整性约束条件的机制称为完整性
  • #五种完整性约束: #NOT NULL :非空约束,指定某列不能为空; #UNIQUE : 唯一约束,指定某列或者几列组合不能重复 #PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录 #FOREIGN KEY :外键,指定该行记录从...
  • 数据库完整性约束

    2020-12-01 21:23:15
    3.关系模型中的3类完整性约束 1.实体完整性: 若属性集A是关系R的码,则A不能去空值null 如果码是由若干个属性组成,每个属性都不能取空值 2.参照完整性: F是关系R的外键是关系S的主键F的取值必须 取
  • 1.完整性约束命名子句 CONSTRAINT <完整性约束条件名><完整性约束条件> <完整性约束条件>包括NOT NULL、UNIQUE、PRIMARY KEY短语、FOREIGN KEY短语、CHECK短语等 [例5.10]建立学生登记表Student,...
  • 完整性检查是围绕完整性约束条件进行的,因此完整性约束条件是完整性控制机制的核心。 完整性约束条件作用的对象可以是关系、元组、列三种。其中列约束主要是列的类型、取值范围、精度、排序等约束条件。元组的约束...
  • 数据库完整性实验】实验完整代码 打开ScoreDB数据库,完成以下操作: (1)分别定义ScoreDB数据库中各基表的主键、外键,实现实体完整性约束和参照完整性约束; (2)往student表插入一条跟已有的学号相同的学生...
  • 完整性约束  完整性约束是为了表的数据的正确性!如果数据不正确,那么一开始不能添加到表中。  主键  当某一列添加了主键约束后,那么这一列的数据不能重复出现。这样每行记录中其主键列的值是这一行的标识。...
  • 数据库中的数据完整性约束

    万次阅读 多人点赞 2018-06-14 18:43:33
    这篇文章讲的是数据库中的数据完整性约束,如有错误或不当之处,还望各位大神批评指正。 什么是数据完整性约束? 数据完整性:存储在数据库中的所有数据值均正确的状态。它是应防止数据库中存在不符合语义规定的...
  • 主要介绍了Django ForeignKey与数据库的FOREIGN KEY约束详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 关系数据库——关系的完整性约束

    千次阅读 2019-04-09 08:38:38
    介绍关系型数据库完整性约束——实体完整性,参照完整性、用户自定义完整性
  • 数据库完整性约束指的是数据库格式的规范,只有满足完整性约束的记录才被允许加入数据库。 数据库完整性约束大致分为四种,包括域约束,参照完整性约束,实体完整性约束和用户自定义的约束。域约束是最基本的约束,...
  • 主要介绍了sqlserver中数据库完整性约束使用方法,需要的朋友可以参考下
  • PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KEY (FK) 标识该字段为该表的外键 NOT NULL 标识该字段不能为空 UNIQUE KEY (UK) 标识该字段的值是唯一的 AUTO_INCREMENT 标识该字段的值...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 140,937
精华内容 56,374
关键字:

数据库完整性约束