精华内容
下载资源
问答
  • 数据库完整性
    千次阅读
    2019-12-03 13:43:39

    实验六 数据库完整性

    一、实验学时

    2学时

    二、实验目的

    (1)实现数据完整性的概念及实施数据完整性的重要性。
    (2)掌握数据完整性的分类。
    (3)掌握完整性约束的添加、删除方法。
    (4)掌握通用默认值的创建、实施与删除方法。
    (5)掌握规则的创建、实施与删除方法。
    (6)掌握级联删除、级联修改方法。

    三、实验要求

    (1)硬件设备:奔腾II或奔腾II以上计算机,局域网。
    (2)软件环境:WINDOWS 9X/NT、WINDOWS SERVER、WINDOWS XP、WINDOWS 7、SQL SERVER 2000/2005/2008中文版企业版或标准版。
    (3)实验课前预习,课后及时完成实验内容。
    (4)实验过程及记录按题目格式要求填写代码清单。
    四、实验内容
    数据完整性是指数据的正确性、完备性和一致性,是衡量数据库质量好坏的重要标准。
    数据完整性分为以下三类:
    实体完整性:是指保证表中所有的行惟一。由主键约束来实现。
    参照完整性:也叫引用完整性。参照完整性总是保证主关键字(被引用表)和外部关键字(引用表)之间的参照关系。它涉及两个或两个以上表数据的一致性维护。由外键约束来实现。
    用户自定义完整性:是指用户针对某一具体关系数据库的数据必须满足的语义要求。通常由Check约束来实现。
    1.完整性约束的添加、删除
    约束是强制数据完整性的首选方法。约束有6种类型:非空约束、默认值约束、Check约束、主键约束、外键约束、唯一性约束。
    (1)使用企业管理器实施约束
    1)为表Student的Sdept字段即所在系字段,设置默认值约束,默认值取‘CS’。
    添加默认约束的操作步骤:

    删除默认约束的操作步骤:

    2)(若原有约束,请在企业管理器中删除Student表的主键约束)在企业管理器中将Sno重设为主键。(会操作即可,操作步骤可略)
    3)为Student表的Sname字段添加唯一性约束。
    添加唯一性约束操作步骤:

    删除唯一性约束操作步骤:

    4)(若原有约束,请在企业管理器中删除原有的外键约束)在企业管理器中删除SC原有的外键约束,在企业管理器中对Sno,Cno字段设置外键约束,约束名自己取。并允许级联删除与级联更新。
    添加外键约束的操作步骤:

    删除外键约束的操作步骤:

    (2)使用T-SQL语句添加、删除约束(约束名自取,并自行添加或修改某些字段值检验有效性)
    1)为Student表的Sno字段添加一个check约束,使学号满足如下条件:
    a. 学号前四位为2002。
    b. 学号后五位为数字字符。
    T-SQL语句为:
    create table Student
    (Sno char(9) check(Sno like’[2002][0-9][0-9][0-9][0-9][0-9]’));

    2)(若原有约束,请在企业管理器中删除SC表主键约束及外键约束)将SC表中的Sno,Cno字段设置为主键。
    T-SQL语句为:
    alter table SC
    add constraint PK_SC primary key(Sno,Cno)

    3)为SC表中的Sno,Cno添加外键约束,约束名自取;并允许级联删除与级联更新。
    添加外键约束T-SQL语句为:

    alter table SC
    add constraint FK_Sno foreign key(Sno) references Student(Sno)
    on delete cascade on update cascade;
    alter table SC
    add constraint FK_Cno foreign key(Cno) references Course(Cno)
    on delete cascade on update cascade

    验证级联删除与级联更新T-SQL语句:
    (测试实例自编)
    **select from Student
    where Sno=‘200200002’
    select from SC
    where Sno=‘200200001’
    delete from Student
    where Sno=‘200200001’
    select from Student
    where Sno=‘200200001’
    select
    from SC
    where Sno=‘200200001’

    2.通用默认值的实施
    (1)使用企业管理器实现
    1)使用企业管理器中为数据库Stu_Course创建一个默认的年龄,名称自取,值为:19。
    具体步骤如下:

    2)将该默认值绑定到Student表中的Sage列。
    具体步骤如下:

    3)将Sage列上的绑定解除,并在企业管理器中删除该默认值。
    具体步骤如下:

    若未解除绑定,能否删除默认值?

    (2)使用T-SQL语句实施默认值
    1)为数据库Stu_Course创建一个关于性别的默认值,名称自取,值为“女”。
    T-SQL语句为:
    create default about_sex as '女’

    2)将该默认值绑定到Student表中的Ssex字段(原有的约束请删除)
    T-SQL语句:
    sp_bindefault about_sex ,"Student.Ssex"

    3)解除表Student的Ssex列的默认值绑定,并删除该默认值。
    T-SQL语句:
    sp_unbindefault ‘Student.Ssex’
    drop default about_sex

    3.规则的实施
    (1)使用企业管理器实现
    1)使用企业管理器为数据库Stu_Course创建一个关于性别的取值规则,规则名自取,要求字段的取值仅能为‘男’或‘女’。
    具体步骤如下:

    2)将该规则绑定到Student表的Ssex字段上。
    具体步骤如下:

    3)解除Student表的Ssex列上的绑定,并删除该规则。
    具体步骤如下:

    (2)使用T-SQL实施规则
    1)为数据库Stu_Course创建一个关于学号的规则,名称自取,学号的具体取值规则为:
    a.学号前四位为2002。
    b.学号后五位为数字字符。
    T-SQL语句为:
    create rule rule_Sno
    as @range like’2002[0-9][0-9][0-9][0-9][0-9]'

    2)将该规则绑定到表Student表、SC表的Sno列上。
    T-SQL语句为:
    exec sp_bindrule ‘rule_Sno’,‘Student.Sno’
    exec sp_bindrule ‘rule_Sno’,'SC.Sno’

    3)解除所有的绑定,并删除该规则。
    T-SQL语句为:
    exec sp_unbindrule ‘Student.Sno’
    exec sp_unbindrule 'SC.Sno’

    更多相关内容
  • 关于数据库安全性,数据库完整性的学习攻略
  • 数据库——数据库完整性

    千次阅读 2022-03-30 14:57:34
    数据库完整性

    数据库的完整性指的是数据的正确性和相容性

    正确性指的是数据是符合显示世界语义、反映当前实际状况的

    相容性指的是数据库同一对象再不同关系表的数据是符合逻辑的

    为了维护数据库的完整性,数据库系统必须能够实现如下功能

    1.提供定义完整性约束条件的机制

    2.提供完整性检查的方法

    3.进行违约处理

    关系型数据库的三种完整性

    1.实体完整性(主码)

    实体完整性在create table 中用primary key 定义,有两种说明方法,一种是列级约束条件,一种是表级约束条件,对于多个属性构成的码,只能用表记约束条件

    create table a

    (name char(20) primary key,                    //primary key 是在列级中被定义的

    age int(200) not null

    );

    或者

    create table a

    ( name char(20),

    age int(200) not null,

    primary key(name)                           //primary key 是在表级中被定义的

    );

    将属性组定义为主码

    create table a

    (name char(20) not null,

    age int(200) not null,

    primary key(name,age)               //只能用表级

    );        

    实体完整性检查和违约处理

    使用primary key定义主码之后,每当用户对主码列进行操作时,数据库管理系统就会自行检查,包括

    1.检查主码值是否唯一,如果不唯一则拒绝插入或修改

    2.检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改

    从而保证实体完整性

    关系行数据库会在主码上自动创建索引,通过索引查找基本表是否存在新的主码值,从而提高效率。

    2.参照完整性(外码)

    实体完整性在create table 中用foreign key 定义哪些列为外码,用peferences指名这些外码参照哪些表的主码

    例如关系sc中(sno,cno)是主码,sno、cno分别参照了student表的主码和course表的主码

    create sc

    (sno char(9) not null,

    cno char(9) not null,

    grade smallint.

    primary key(sno,cno),

    foreign key (sno) peferences student(sno),

    foreign key (cno) peferences course(cno)

    );

    参照完整性的检查和违约处理

    因为参照完整性把两个表中相对应的元组连接起来了,所以对被参照表和参照表的增删改操作可能会破环参照完整性,对此系统提供了三种策略加以处理

    1.拒绝(not action)执行

    不允许该操作执行。该策略一般为默认策略

    2.连级(cascade)操作

    当删除或修改被参照表的一个元组导致参照表(sc)不一致时,删除或修改参照表的所有不一致的元组

    3.设为空值 (set null)

    例如关系sc中(sno,cno)是主码,sno、cno分别参照了student表的主码和course表的主码

    create sc

    (sno char(9) not null,

    cno char(9) not null,

    grade smallint.

    primary key(sno,cno),

    foreign key (sno) peferences student(sno)

            on delete cascade     //当删除student表中的元组时,连级删除sc表的元组

            on update cascade, 

    foreign key (cno) peferences course(cno)

            on delete on action        //当删除course表中的元组造成与sc表不一致时,拒绝删除

            on update cascade 

    );

    3.用户定义的完整性

    属性上的约束条件

    在create table 中定义属性的同时,可以根据应用要求定义属性上的约束条件,包括:

    1.列值非空(not null)

    2.列值唯一(unique)

    3.检查列值是否满足一个条件表达式(check语句

    create table a

    (name char(9) not null  unique primary key

    sex char(2) check(sex in('男','女'))

    );

    属性上的约束条件的检查和违约处理

    当往表里插入元组或修改属性的值时,关系数据库管理系统将检查属性上的约束条件,检查是否满足,不满足将拒绝执行

    元组上的约束条件

    可以用check语句定义元组上的约束条件

    当学生性别是男时,名字不能用MS打头

    create table student 

    (

    sno char(9),

    sname char(8) not null,

    sex char(2),

    primary key (sno),

    check(sex='女' or sname not like 'MS%')        //定义元组中sname和sex两个属性之间 的约束

    );

    元组上的约束条件检查和违约处理

    不满足拒绝执行

    完整性约束命名子句

    constraint <完整性约束条件名><完整性约束条件>

    条件包括 not null.,unique,primary key,foreign key,check等

    create table a

    (

    sno char(8) ,

    sname char(8) constraint c1 not null,

    constrant c2 primary key(sno) 

    );

    可以使用alter table 语句修改表的完整性限制

    alter table a

     drop constrant c1;

    断言

    可以使用create assertion 语句,通过声明性断言来指定更具一般性的约束,可以定义涉及多个表或聚集操作的比较比较复杂的完整性约束。

    创建断言后,任何对断言中所涉及关系的操作都会触发关系数据库管理系统对断言的检查,任何使断言不为真的操作都会被拒绝

    创建断言的语句格式:

    create assertion <断言名><check 子句>

    每个断言都会有一个名字,check子句的约束条件和where子句的表达式类似

    例 :限制数据库课程最多60名学生选修

    create assertion asse

            check (60>=(select count(*))          /断言的谓语涉及聚集操作count的sql语句

                    from course,sc

                    where sc.cno=course.cno and course.cname='数据库'

    );

    每当学生选修课程时,将在sc表中插入一条元组,断言触发检查,如果选修数据库课程的认识超过60,check子句返回值为‘假’,对sc表的插入操作将被拒绝。

    删除断言:

    drop assertion <断言名>;

    触发器

    触发器又叫事件-条件-动作规则。

    当特定的事件(增删改,事务的结束等)发生时,对规则的条件进行检查,如果条件成立则执行规则中的动作(类似if语句),否则不执行该动作。规则中的动作体可以很复杂,可以设计其他表和其他数据库对象,通常是一段sql存储过程。

    触发器的一般格式为

    create tigger <触发器名>        //每当触发事件发生时,该触发器将被激活

    { before | after }<触发器事件> on <表名>        //指名触发器激活的时间是在触发事件之前还                                                                                是之后可以用update、delete等,也可以用                                                               update of <触发列,.....>进一步表明修改哪些列时触发

    referncing new | old row as <变量>          //referncing指出引用的变量 ,new指插入表,old                                                                               指删除表

    for each {row |statement}        //定义触发器的类型,指明动作体执行的频率,row是行级触发                                                       器,statement是语句级,若一个表的行数为100,对表的一                                                     个属性列的值进行修改,row要执行100次,statement只执                                                      行一次

    [ when <触发条件>] <触发动作体>        //仅当触发条件为真时才执行触发动作体动作体可以                                           为一个匿名的PL/SQL过程块,也可以是对己创建存储过程的调用                                           如果是row级别的,用户可在过程体中使用new和old,如果是                                                  statement级别的不可以用new和old。可以不要触发条件

    如果触发动作体执行失败,激活触发器的事件(对数据库的增删改操作)就会终止执行,触发器的目标表或可能影响的对象不发生变化。

    例子:当对表sc的grade属性进行修改时若分数增加10%,则将此次操作记录到另一个表sc_U(sno、cno、oldgrade、newgrade)其中oldgrade是旧的成绩,newgrade是新的成绩。

    create tigger sc_T

    after update of grade  on sc        //在sc表的grade列被更新后触发

    referncing 

            oldrow as oldtuple,

            newrow as newtuple

            //旧表名为oldtuple,新表名为newtuple

    for each row 

    when (newtuple.grade >=1.1 * oldtuple.grade)

            insert

            into sc_u(sno,cno,oldgrade,newgrade)

            values(oldtuple.sno,oldtuple.cno,oldtuple.grade、newtuple.grade)

    将每次对表student的插入操作所增加的学生个数记录到表student-insertLog表中

    create tigger insertStudent

    after insert on student 

    referncing

            new table as delta

    for each statement         //执行完全部insert操作再执行触发器动作

            insert into student-InsertLog(Number)

            select count(*)

            from delta

    //dalta是一个关系名,其模式与student相同,包含的元组是insert语句增加的元组

    定义一个before行级触发器,为教师表teacher定义完整性规则"教授工资不得低于4000,如果低于4000自动改为4000"

    create tigger tea 

    before insert or update on teacher

    referncing

            new row as newtuple 

    for each row 

    begin         //这是个PL/SQL过程块

            If(newtuple.job='教授')and (newtuple.sal<4000)        //因为是行级的所以可以引用

                    then newtuple.sal =4000;                //使用插入或更新后的新值

            end if                                                 //循环结束

    end;                                                        //动作体结束

    激活触发器

    对于多个触发器的激活顺序为

    1.before触发器

    2.激活触发器的sql语句

    3.after触发器

    多个before或after触发器,遵循先创建先执行的原则

    删除触发器

    drop tigger <触发器名> on <表名>

    展开全文
  • 数据库完整性

    千次阅读 2018-05-23 22:43:46
    数据的完整性和安全性 数据库的完整性和安全性是两个既有联系又不尽相同的概念。数据的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。...一、数据库完整...

    数据的完整性和安全性
    数据库的完整性和安全性是两个既有联系又不尽相同的概念。数据的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。数据的安全性是保护数据库防止恶意破坏和非法存取。
    完整性检查和控制的防范对象是不合语义的、不正确的数据,防止它们进入数据库。安全性控制的方法对象是非法用户和非法操作,防止它们对数据库的非法存取。

    一、数据库完整性的概念

    数据库的完整性是指数据的正确性和相容性。数据的正确性是指数据是符合现实世界语义、反映当前实际状况的;数据的相容性是指数据库同一对象再不同关系表中的数据是符合逻辑的。

    二、维护完整性实现的功能

    1、提供定义完整性约束条件的机制

    完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件。它表达了给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的争取、有效和相容。SQL标准使用了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户定义完整性。这些完整性一般由SQL的数据定义语言语句来实现,它们作为数据库模式的一部分存入数据字典中。

    2、提供完整性检查的方法

    数据库管理系统中检查数据是否满足完整性约束条件的机制称为完整性检查。一般在INSERT、UPDATE、DELETE语句执行后开始检查,也可以在事务提交时检查。检查这些操作执行后数据库中的数据是否违背了完整性约束条件。

    3、进行违约处理

    数据库管理系统若发现用户的操作违背了完整性约束条件将采取一定的动作。关系数据库管理系统使得完整性控制成为其核心支持的功能,从而能够为所有用户和应用提供一致性的数据库完整性。

    三、实体完整性

    1、定义实体完整性

    关系模型的实体完整性在CREATE TABLE中用PRIMARY KEY定义。对单属性构成的码有两种说明方法:定义为列级约束条件和定义为表级约束条件。对多个属性构成的码只有一种说明方法,即定义为表级约束条件。
    备注:实际上就是定义一个主键,并且只能在表级定义主码。

    2、实体完整性检查和违约处理

    用PRMARY KEY短语定义了关系的主码后,每当用户程序对基本表的插入一条记录或对主码列进行更新操作时,关系数据库管理系统将按照实体完整性规则自动进行检查。
    1)检查主码是否唯一,不唯一则拒绝插入或修改。
    2)检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。
    检查记录主码值是否唯一的一种方法是进行全表扫描,依次判断表中每一条记录的主码值与将插入记录的主码值(或修改的新主码值)是否相同。这种方法比较耗时。另一种就是在主码上自动建立一个索引,通过索引进行判断是否存在。这样可以大大提高效率。

    四、参照完整性

    1、定义参照完整性

    关系模型的参照完整性在CREATE TABLE中FOREIGN KEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码。
    备注:相当于外键。

    2、参照完整性检查和违约处理

    参照完整性将两个表中的相应元组联系起来了。因此,对被参照表和参照表进行增删改操作时有可能破坏参照完整性,必须进行检查以保证这两个表的相容性。
    可能出现的情况和处理
    情况和处理
    处理策略:
    1. 拒绝(NO ACTION)执行:不允许该操作执行,该策略一般设置为默认策略。
    2. 级联(CASCADE)操作:当删除或修改被参照表的一个元组导致与参照表的不一致时,删除或修改参照表中的所有导致不一致的元组。
    3. 设置为空值:当删除或修改被参照表的一个元组造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。

    关系数据库系统在实现参照完整性时,除了要提供定义主码、外码的机制外,还需要提供不同的策略供用户选择。

    五、用户定义的完整性

    用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求。

    1、属性上的约束条件
    1. 属性上约束条件的定义
      在CREATE TABLE中定义属性的同时,可以根据应用要求定义属性上的约束条件(属性值限制),包括
      1)列值非空(NOT NULL)
      2)列值唯一(UNIQUE)
      3)检查列值是否满足一个条件表达式(CHECK语句)
    2. 属性上约束条件的检查和违约处理
      当表中插入元组或修改属性的值时,关系数据库管理系统将检查属性上的约束条件是否被满足,不满足则被拒绝执行。
    2、 元组上的约束条件
    1. 元组上约束条件的定义
      与属性上约束条件的定义类似,在CREATE TABLE语句中可以用CHECK短语定义元组上的约束条件,即元组级的限制。同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件。
    2. 元组上约束条件的检查和违约处理
      当往表中插入元组或修改属性的值时,关系数据库管理系统将检查元组上的约束条件是否被满足,如果不满足就拒绝执行操作。

    完整性机制的实施会影响系统性能,因此许多数据库管理系统对完整性机制的支持比对安全性的支持要晚得多,也弱得多。对于违反完整性的操作一般采用拒绝执行的方法。用户要根据应用语义来定义合适的处理策略,以保证数据库的正确性。

    六、完整性约束命名子句

    SQL在CREATE TABLE语句中提供了完整性约束命名子句CONSTRAINT,用来对完整性约束条件命名,从而可以灵活地增加、删除一个完整性约束条件。

    1、完整性约束命名子句

    CONSTRAINT <完整性约束条件名><完整性约束条件>
    <完整性约束条件>包括NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK短语等。

    2、修改表中的完整性限制

    使用ALTER TABLE语句修改表中的完整性限制。

    七、域中的完整性约束

    域是一组具有相同数据类型的值的集合。CREATE DOMAIN语句可以建立一个域以及该域应满足的完整性约束条件,然后就可以用域来定义属性。这样数据库中不同的属性可以来自同一个域,当域上的完整性约束条件改变时只要修改域的定义就可以了,不用一一修改域上的各个属性。

    展开全文
  • 数据库\试验6 数据库完整性数据库\试验6 数据库完整性数据库\试验6 数据库完整性
  • 6实验六-数据库完整性.pdf6实验六-数据库完整性.pdf6实验六-数据库完整性.pdf6实验六-数据库完整性.pdf6实验六-数据库完整性.pdf6实验六-数据库完整性.pdf6实验六-数据库完整性.pdf6实验六-数据库完整性.pdf
  • 6实验六-数据库完整性.docx6实验六-数据库完整性.docx6实验六-数据库完整性.docx6实验六-数据库完整性.docx6实验六-数据库完整性.docx6实验六-数据库完整性.docx6实验六-数据库完整性.docx6实验六-数据库完整性.docx
  • 数据库-数据库完整性

    千次阅读 多人点赞 2019-06-29 00:26:10
    数据库完整性 实体完整性 · 定义实体完整性 · 实体完整性检查和违约处理 参照完整性 · 定义参照完整性 · 参照完整性检查和违约处理 用户定义的完整性 · 属性上的约束条件 · 元祖上的约束条件 完整性...

    目录

    数据库完整性

    实体完整性

    · 定义实体完整性

    · 实体完整性检查和违约处理

    参照完整性

    · 定义参照完整性

    · 参照完整性检查和违约处理

    用户定义的完整性

    · 属性上的约束条件

    · 元祖上的约束条件

    完整性约束命名子句

    · 完整性约束命名子句

    · 修改表中的完整性限制

    域中的完整性限制

    断言

    · 创建断言的语句格式

    · 删除断言的语句格式

    触发器

    · 定义触发器

    · 激活触发器

    · 删除触发器


     

    数据库完整性

    数据库的完整性是指数据的正确性和相容性。数据的正确性是指数据是符合现实世界语义、反映当前实际状况的;数据的相容性是指数据库同一对象在不同关系表中的数据是符合逻辑的。

    数据的完整性和安全性是两个既有联系又不尽相同的概念。数据的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。数据的安全性是保护数据库防止恶意破坏和非法存取。因此,完整性检查和控制的防范对象是不合语义的、不正确的数据,防止它们进入数据库。安全性控制的防范对象是非法用户和非法操作,防止它们对数据库数据的非法存取。

    为了维护数据库的完整性,数据库管理系统需要具备如下功能:

    1、提供定义完整性约束条件的机制

    完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件。它表达了给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容、SQL标准使用了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户定义完整性。这些完整性一般由 SQL 的数据定义语言语句来实现,它们作为数据库模式的一部分存入数据字典中。

    2、提供完整性检查的方法

    数据库管理系统中检查数据是否满足完整性约束条件的机制称为完整性检查。一般在 insert 、update 、 delete 语句执行后开始检查,也可以在事务提交时检查。检查这些操作执行后数据库中的数据是否违背了完整性约束条件。

    3、进行违约处理

    数据库管理系统若发现用户的操作违背了完整性约束条件将采取一定的动作,如拒绝 (no action) 执行该操作或级联 (cascade) 执行其他操作,进行违约处理以保证数据的完整性。

    早期的数据库管理系统不支持完整性检查,因为完整性检查时费资源。现在商用的关系数据库管理系统产品都支持完整性规则,即完整性定义和检查控制由关系数据库管理系统实现,不必由应用程序来完成,从而减轻了应用程序员的负担。更重要的是,关系数据库管理系统使得完整性控制成为其核心支持的功能,从而能够为所有用户和应用提供一致的数据库完整性。因为由应用程序来实现完整性控制是有漏洞的,有的应用程序定义的完整性约束条件可能被其他应用程序来破坏,数据库数据的正确性仍然无法保障。

     

    前面在数据定义时提到了关系数据库三类完整性约束的基本概念,这篇就是来解释 SQL语言中实现这些完整性控制功能的方法。

     

    实体完整性

    · 定义实体完整性

    关系模型的实体完整性在 create table 中用 primary key 定义。对单属性构成的码有两种表示方法,一种是定义为列级约束条件,另一种是定义为表级约束条件。而对于有多个属性构成的码只有一种说明方法,即定义为表级约束条件。这在前面数据定义时已提到过,这里再说一下,具体例子如:

    create table Student(
    	Sno char(9) primary key ,	 /*列级定义主码*/
            ...
    	Sname char(20) not null ,
    )
    
    create table Student(
    	Sno char(9) ,	
    	...
    	Sdept char(20) ,
    	primary key (Sno)  /*表级定义主码*/
    )
    create table Sc(
    	Sno char(9) ,	
    	Cno char(4) ,
    	Grade smallint ,
    	primary key (Sno,Cno)  /*只能表级定义主码*/
    )

    · 实体完整性检查和违约处理

    在用 primary key 定义了关系的主码后,每当用户对基本表插入一条记录或对主码列进行更新操作时,RDBMS (关系数据库管理系统) 将会按照实体完整性规则(前面数据定义中提到过)自动进行检查。包括:1)、检查主码值是否唯一,如果不唯一则拒绝插入或修改;2)、检查主码的各个属性是否为空,只要有一个为空则拒绝插入或修改。这样就保证了实体完整性。

    检查记录中主码值是否唯一的一种方法是全盘扫描,依次判断表中每一条记录的主码值与将插入记录的主码值(或者修改的新主码值)是否相同,但这种扫描是十分耗时的。为了避免对基本表进行全表扫描,关系数据库管理系统一般都在主码上自动建立一个索引,如 B+ 树索引 (如果对 B+ 树不了解可以见博客 B+ 树索引),通过索引查找基本表中是否已经存在新的主码值时不需要查看全部值,而是看特定的几个结点即可,大大提高查找效率。

     

    参照完整性

    · 定义参照完整性

    关系模型的参照完整性在 create table 时 用 foreign key 短语定义哪些列为外码,用 references 短语指明这些外码参照哪些表的主码。仍用前边已提到过的例子,学生数据库中的选课表,例:

    create table SC(
    	Sno char(9) ,	
    	Cno char(4) ,
    	Grade smallint ,
    	primary key (Sno,Cno)  /*只能表级定义主码*/
    	foreign key(Sno) references Student(Sno),    /*在表级定义参照完整性*/
    	foreign key(Cno) references Course(Cno) 
    )

    · 参照完整性检查和违约处理

    参照完整性将两个表中相应的元组联系起来了,因此对被参照表和参照表进行增、删、改等操作时均有可能破坏参照完整性,必须进行检查以保证这两个表的相容性。下面举几种可能破坏参照完整性的情况(以 SC 表和 Student 表为例):

    (1)、SC 表中增加一个元组,该元组的 Sno 属性值在表 Student 中找不到一个元组,其 Sno 属性值与之相等;(2)、修改 SC 表中的一个元组,修改后该元组的 Sno 属性值在表 Student 中找不到一个元组,其 Sno 属性值与之相等;(3)、从 Student 表中删除一个元组,造成 SC表中某些元祖的 Sno 属性值在表 Student 中找不到一个元组,其 Sno 属性值与之相等;(4)、修改 Student 表中一个元组的 Sno 属性,造成 SC 表中某些元祖的 Sno 属性值在表 Student 中找不到一个元组,其 Sno 属性值与之相等。

    上述的几种情况发生时均可能破坏参照性完整性,而此时系统可以采用以下策略进行处理:

    1)、拒绝执行:不允许该操作执行,该策略一般作为默认策略执行。2)、级联操作:当删除或修改被参照表 ( Student ) 的一个元组导致与参照表 ( SC ) 的不一致时,删除或修改参照表中的所有导致不一致的元组。3)、设置为空值:当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。

    这里再说一下处理情况中第三种设置空值的情况,外码能否接受空值的问题。例如有下面关系 :学生(学号,姓名,性别,专业号,年龄),专业(专业号,专业名) ,这其中学生表中的 “专业号” 是外码,“专业号” 是专业表中的主码,假设专业表中的某个元祖被删除,专业号为 12,按照设置为空值的策略,就要把学生表中专业号=12 的所有元组的专业号设置为空值,这对应了这样的语义:某个专业被删除了,该专业的所有学生专业未定,这种情况是可以为空值的。但在学生数据库中,关系 Student 为被参照关系,其主码为 Sno ,SC 为 参照关系,Sno 为外码,它显然是不能取空值的,因为 Sno 为 SC 表的主属性,按照实体完整性 Sno 不能为空值,若 SC 的 Sno 为空值,则表明尚不存在的某个学生,或某个不知学号的学生选修了某门课程,其成绩记录在 Grade 列中,这与学校的应用环境是不相符的,因此 SC 表的 Sno 列不能取空值,同样 SC 的 Cno 是外码 ,也是 SC 的主属性,也不能取空值。

    因此对于参照完整性,除了应该定义外码,还应定义外码列是否允许为空值

    一般情况下,当对参照表和被参照表的操作违反了参照完整性时,系统选用默认策略,即拒绝执行。如果想让系统采用其他策略则必须在创建参照表时显式地加以说明。例:

    create table SC(
    	Sno char(9) ,	
    	Cno char(4) ,
    	Grade smallint ,
    	primary key (Sno,Cno)  /*只能表级定义主码*/
    	foreign key(Sno) references Student(Sno) 
    	on delete cascade /*当删除 Student 表中的元组时,级联删除 SC 表中对应的元组*/
    	on update cascade /*当更新 Student 表中的元组时,级联更新 SC 表中对应的元组*/
    	,
    	foreign key(Cno) references Course(Cno) 
    	on delete no action /*当删除 Course 表中的元组造成与 SC 表不一致时,拒绝删除*/
    	on update cascade /*当更新 Course 表中的 Cno 时,级联更新 SC 表中相应的元组*/
    )

    由上述例题看出,我们可以对 delete 和 update 采用不同的策略。当删除被参照表 Course 表中的元组,造成与参照表 (SC) 不一致时,拒绝删除被参照表的元组;对更新操作则采取级联更新的策略。

    关系数据库管理系统在实现参照完整性时,除了要提供定义主码、外码的机制外,还需要提供不同的策略供用户选择,而具体选择哪种策略,要根据应用环境要求确定。

    用户定义的完整性

    用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求。目前的关系数据库管理系统都提供了定义和检验这类完整性的机制,使用了和实体完整性、参照完整性相同的技术和方法来处理它们,而不必由应用程序承担这一功能。

    · 属性上的约束条件

    属性上约束条件的定义:

    在 create table 中定义属性的同时,可以根据应用要求定义属性上的约束条件,即属性值限制包括:列值非空 ( not null )、列值唯一 ( unique )、检查列值是否满足条件表达式 ( check 短语) 。例如:

    create table Student (
            Sno int primary key ,
            Sname char(6) unique not null ,        /*属性值唯一且不能为空*/
            Ssex char(2) check (Ssex in ('男','女')) ,        /*性别属性只允许取 '男' 或 '女'*/
            ...
    )
    
    create table SC(
            Sno char(6) not null ,
            Cno char(4) not null ,        /*Sno,Cno 属性不允许取空值*/
            Grade smallint check (Grade >= 0 and Grade <=100),        /*Grade 取值范围是 0~100*/
            primary key (Sno,Cno)
    )

    属性上约束条件的检查和违约处理:

    当往表中插入元组或修改属性的值时,关系数据库管理系统将检查属性上的约束条件是否被满足,如果不满足则操作被拒绝执行

     

    · 元祖上的约束条件

    元祖上约束条件的定义:

    与属性上约束条件的定义类似,在 create table 语句中可以用 check 短语定义元祖上的约束条件,即元组级的限制。同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件。例:

    create table Student(
    	Sno char(9),
    	Sname char(6) not null ,
    	Ssex char(2) ,
    	Sage smallint ,
    	Sdept char(20) ,
    	primary key (Sno),
    	check (Ssex='女' or Sname not like 'Mr.%')
    );
    --定义了元组中 Sname 和 Ssex 两个属性值之间的约束条件。

    在上述例题中,性别是女性的元组都能通过该项 check 检查,因为 Ssex='女' 成立;但当性别为男性时,要通过检查名字一定不能以 Mr. 开头,因为当 Ssex='男' 时,条件要想成为真值,Sname not like 'Mr.%' 必须为真值。

    元祖上约束条件的检查和违约处理:

    当往表中插入元组或修改属性的值时,关系数据库管理系统将检查元祖上的约束条件是否被满足,如果不满足则操作被拒绝执行

     

    完整性约束命名子句

    前面所提到的完整性约束条件都是在 create table 语句中定义,此外,SQL 还在 create table 语句中提供了完整性约束命名子句 constraint ,用来对完整性约束条件命名,从而能更加灵活地增加、删除一个完整性约束条件。

    · 完整性约束命名子句

    完整性约束条件包括:not null 、unique 、primary key 、foreign key 、check 、default 短语等,其命名格式为:

    constraint <完整性约束条件名><完整性约束条件>

    下面给出示例:

    create table Student(
    	Sno numeric(6)
    		constraint c1 check (Sno between 100 and 999),
    	Sname char(20)
    		constraint n1 not null ,
    	Sage numeric(3)
    		constraint c2 check (Sage<30),
    	Ssex char(2)
    		constraint c3 check(Ssex in ('男','女')),
    		constraint d1 default '女' ,	/*默认为 女 */
    	constraint StudentKey primary key(Sno)		 /*主码约束 StudentKey*/
    );
    
    --同样外键也是如此设置
    --constraint F_Sno foreign key(Sno) references Student(Sno)

    · 修改表中的完整性限制

    同前面 数据定义 篇中修改一样,仍可以使用 alter table 语句修改表中的完整性限制。例:

    alter table Student
    	drop constraint c1 ;	/*删除 约束名为 c1 的约束。*/
    
    --修改表中约束条件时,可以先对原约束删除,再增加新的约束。
    alter table Student
    	drop constraint c2 ;
    alter table Student
    	add constraint C2 check (Sage<28 and Sage>18);
    /*将年龄的约束条件改为 18~28 之间。*/

    域中的完整性限制

    域是数据库中一个重要概念,一般地,域是一组具有相同数据类型的值的集合。SQL 支持域的概念,并可以用 create domain 语句建立一个域以及该域应该满足的完整性约束条件,然后就可以用域来定义属性。这样定义的优点是数据库中不同的属性可以来自同一个域,当域上的完整性约束条件改变时,只要修改域的定义即可,而不必一一修改域上的各个属性。例:

    create domain GenderDomain char(2)
    	check (value in ('男','女'));
    
    --建立一个性别域,并对其限制命名
    create domain GenderDomain char(2)
    	constraint GD check (value in ('男','女'));
    
    --删除域 GenderDoma 的限制条件 GD
    alter domain GenderDomain
    	drop constraint GD ;
    
    --在域 GenderDomain 上增加性别的限制条件 GDD。
    alter domain GenderDomain
    	add constraint GDD check(value in('1','0'));

     

    断言

    在 SQL 中可以使用数据定义语言中的 create assertion 语句,通过声明性断言来指定更具一般性的约束,可以定义涉及多个表或聚集操作的比较复杂的完整性约束。断言创建以后,任何对断言中所涉及关系的操作都会触发关系数据库管理系统对断言的检查,任何使断言不为真值的操作都会被拒绝执行

    · 创建断言的语句格式

    create assertion <断言名> <check 子句> :每个断言都被赋予一个名字,<check 子句> 中的约束条件与 where 子句的条件表达式类似。下面举几个例子:

    create assertion Ass_SC_DB_NUM
    	check (60>=(select count(*)
    				from Course,SC
    				where SC.Cno=Course.Cno and Course.Cname='数据库')
    	);

    上述定义的断言是用来限制数据库课程最多有 60 名学生选修。每当学生选修课程时,将在 SC 表中插入一条元祖,该断言就被触发检查。如果选修数据库课程的人数已经超过 60 人,check 子句返回值为 “假” ,则对 SC 表的插入操作被拒绝。

    --限制每一门课程最多 60 名学生选修
    create assertion ASS_SC_NUM
    	check (60>= all(select count(*)
    					from SC
    					group by Cno)
    	);
    
    --限制每个学期每一门课程最多 60 名学生选修
    
    --首先修改 SC 表的模式,增加一个 “学期(term)的属性”,类型是 date 
    alter table SC
    	add term date ;
    --然后定义断言
    create assertion ASS_SC_CNUM
    	check (60>= all(select count(*)
    					from SC
    					group by Cno,term)
    	);

    · 删除断言的语句格式

    drop assertion <断言名> :如果断言很复杂,则系统在检测和维护断言上的开销较高,这是在使用断言时应该注意的,此时可以选择性地将其断言删除。

    触发器

    触发器是用户定义在关系表上的一类由事件驱动的特殊过程。一旦定义,触发器将被保存在数据库服务器中,任何用户对表的增、删、改操作均由服务器自动激活相应的触发器,在关系数据库管理系统核心层进行集中的完整性控制。触发器类似于约束,但是比约束更加灵活,可以实施更为复杂的检查和操作,具有更精细和更强大的数据控制能力

    需要注意的是,触发器在 SQL 99 之后才写入 SQL 标准,但是很多关系数据库管理系统很早就支持触发器,因此不同的关系数据库管理系统实现的触发器语法各不相同、互不兼容,希望大家在上机实验时注意下该情况。

    · 定义触发器

    触发器又叫做 事件-条件-动作 规则。当特定的系统事件(如对一个表的增、删、改操作,事务的结束等)发生时,对规则的条件进行检查,如果条件成立则执行规则中的动作,否则不执行该动作。规则中的动作体可以很复杂,可以涉及其他表和其他数据库对象,通常是一段 SQL 存储过程。

    SQL 使用 create trigger 命令建立触发器,其一般格式为:

    create trigger <触发器名>	/*每当触发事件发生时,该触发器被激活*/
    	{before|after}<触发事件> on <表名>	/*指明触发器激活的时间是在执行触发事件前或后*/
    	referencing new|old row as <变量>	/* referencing 指出引用的变量 */
    	for each{row|statement}		/*定义触发器的类型,指明动作体执行的频率*/
    	[when <触发条件>] <触发动作>	/*仅当触发条件为真时才执行触发动作体*/

    下面对定义触发器的各部分语法进行详细说明:

    1)、只有表的拥有者,即创建表的用户才可以在表上创建触发器,并且一个表上只能创建一定数量的触发器。触发器的具体数量由具体的关系数据库管理系统在设计时确定

    2)、触发器名:触发器名可以包括模式名,也可以不包含模式名。同一模式下,触发器名必须是唯一的,并且触发器名和表名必须在同一模式下。

    3)、表名:触发器只能定义在基本表上,不能定义在视图上。当基本表的数据发生变化时,将激活定义在该表上相应触发事件的触发器,因此该表也被称为触发器的目标表。

    4)、触发事件:触发事件可以是 insert 、delete 或 update ,也可以是这几个事件的组合,如 insert or delete 等,还可以是 update of <触发列,···> ,即进一步指明修改哪些列时激活触发器。after/before 是触发的时机。after 表示在触发事件的操作执行后激活触发器;before 表示在触发事件的操作执行之前激活触发器。

    5)、触发器类型:触发器按照所触发动作的间隔尺寸可以分为行级触发器语句级触发器。假设在 teacher 表上创建了一个 after update 触发器,触发事件是 update 语句:update teacher set Deptno=5 ;假设表 teacher 有 100 行,如果定义的触发器为语句级触发器,那么执行完 update 语句后触发动作体执行一次;如果是行级触发器,触发动作体将执行 100 次。

    6)、触发条件触发器激活时,只有当触发器条件为真时触发动作体才执行,否则触发动作体不执行。如果省略 when 触发条件,则触发动作体在触发器激活后立即执行

    7)、触发动作体:触发动作体既可以是一个匿名 PL/SQL 过程块,也可以是对已创建存储过程的调用。如果是行级触发器,用户可以在过程中使用 new 和 OLD 引用 update/insert 事件之后的新值和 uipdate/delete 事件之前的旧值;如果是语句级触发器,则不能在触发动作体中使用 new 或 OLD 进行引用。

    如果触发动作体执行失败,激活触发器的事件(即对数据库的增、删、改操作)就会终止执行,触发器的目标或触发器可能影响的其他对象不发生任何变化。下面用例子通俗地讲一下:

    create trigger SC_T		/* SC_T 是触发器的名字*/
    	after update of Grade on SC
    	/*触发的时机,表示当对 SC 的 Grade 属性修改完后再触发下面的规则*/
    	referencing 
    		oldrow as OldTuple,
    		newrow as NewTuple
    	for each row	/*行级触发器,每执行一次 Grade 的更新,下面的规则就执行一次*/
    	when(NewTuple.Grade >= 1.1* OldTuple.Grade)
    		insert into SC_U(Sno,Cno,OldGrade,NewGrade)
    			values(OldTuple.Sno,OldTuple.Cno,OldTuple.Grade,NewTuple.Grade)

    上述例子是当对表 SC 的 Grade 属性进行修改时,若分数增加了 10% ,则将此次操作记录到另一个表 SC_U (Sno,Cno,Oldgrade,Newgrade) 中,其中 Oldgrade 是修改前的分数,Newgrade 是修改后的分数。本例中的 referencing 指出引用的变量,如果触发事件是 update 操作并且有 for each row 子句,则可以引用的变量有 oldrow 和 newrow ,分别表示修改之前的元组和修改之后的元组。若没有 for each row 子句,则可以引用的变量有 oldtable 和 newtable ,oldtable 表示原来表中的内容,newtable 表示表中变化后的部分。

    有例题:将每次对表 Student 的插入操作所增加的学生个数记录到表 StudentInsertLog 中。

    create trigger Student_Count
    	after insert on Student
    	referencing 
    		new table as delta        /* delta 是一个关系名,其模式与 Student 相同*/
    	for each statement		/*语句级触发器,即执行完 insert 语句后下面的触发动作体才执行一次*/
    		insert into StudentInsertLog(Numbers)
    			select count(*) from delta;
    

    有例题:定义一个 before 行级触发器,为教师表 Teacher 定义完整性规则 “教授的工资不得低于 4000 元,如果低于则自动改为 4000 元”。

    create trigger Insert_Or_Update_Sal
    	before insert or update on Teacher
    	referencing
    		new row as newTuple
    	for each row
    	begin		/*定义动作触发体,这是一个 PL/SQL 过程块*/
    		if(newtuple.Job='教授') and (newtuple.Sal < 4000)	/*因为是行级触发器,可在过程体中*/
    			then newtuple.Sal = 4000 ;/*使用插入或更新操作之后的新值*/
    		end if ;
    	end ;	/*触发动作体结束*/

    因为定义的是 before 触发器,在插入和更新教室记录前就可以按照触发器的规则调整教授的工资,不必等插入之后再检查再调整。

     

    · 激活触发器

    触发器的执行是由触发事件激活,并由数据库服务器自动执行的。一个数据表上可能定义了多个触发器,如多个 before 触发器、多个 after 触发器等,同一个表上的多个触发器激活时遵循如下的执行顺序

    1)、执行该表上的 before 触发器;2)、激活触发器的 SQL 语句;3)、执行该表上的 after 触发器

    对于同一个表上的多个 before (after) 触发器,遵循“ 谁先创建谁先执行 ”的原则,即按照触发器创建的时间先后顺序执行。有些关系数据库管理系统是按照触发器名称的字母排序顺序执行触发器。

     

    · 删除触发器

    其语法为:drop trigger <触发器名> on <表名> ; 触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除。触发器是一种功能强大的工具,但在使用时要慎重,因为在每次访问一个表时都可能触发一个触发器,这样会影响系统的性能。

     

    展开全文
  • 数据库完整性5.1 实体完整性5.1.1 实体完整性定义5.1.2 实体完整性检查和违约处理5.2 参照完整性5.2.1 参照完整性定义5.2.2 参照完整性检查和违约处理小结5.3 用户定义的完整性5.3.1 属性上的约束条件不允许取空值列...
  • 数据库完整性包括哪三种

    千次阅读 2021-01-19 12:36:51
    数据库完整性包括哪三种1、实体完整性实体完整性是对关系中的记录唯一性,也就是主键的约束。准确地说,实体完整性是指关系中的主属性值不能为Null且不能有相同值。定义表中的所有行能唯一的标识,一般用主键,唯一...
  • 数据库完整性:数据的正确性(是指数据是符合现实世界语义,反映了当前实际状况的)、数据的相容性(是指数据库同一对象在不同关系表中的数据是符合逻辑的) 数据的完整性 : 防止数据库中存在不符合语义的数据,...
  • 数据库完整性是为了在数据的添加、删除、修改等操作中不出现数据的破坏或多个表数据不一致,是指存储在数据库中的数据正确无误并且相关数据具有一致性,数据在逻辑上的一致性、正确性、有效性和相容性。...
  • 数据库----实验4 数据库完整性实验

    千次阅读 2020-07-18 14:25:41
    学习用户自定义约束,并实践用户完整性,利用短语not null,unique,check保证用户定义完整性。 二、实验内容 1. 问题描述 2. 数据库设计 (1)利用create语句分别创建四个表,同时要注意标注实体完整性...
  • 数据库完整性之参照完整性

    千次阅读 2022-02-09 22:06:27
    数据表字段的外键约束属于数据库设计——关系模型的参照完整性的内容。     关系模型的参照完整性是指:在创建表create table的SQL语句中,用foreign key短语定义哪些列/字段作为当前数据表的...
  • 数据库完整性约束

    千次阅读 2017-04-05 09:19:17
    介绍数据库完整性
  • 文章目录0....首先先概述一下数据库完整性指的是什么,数据库完整性指的是数据的正确性和相容性。 数据的正确性是指数据是符合现实世界语义、反映当前实际状况的;比如说人类的性别,只能是男和女。 数...
  • 数据库完整性: 指数据库中数据的正确性、相容性 正确性:保证进入数据库的数据是符合语义约束的合法数据 相容性:同一个事实的两个数据应当是一致的 为了维护数据库的定义完整性: DBMS必须具备三个功能:...
  • SQL语言与数据库完整性和安全性

    千次阅读 2021-05-22 22:54:50
    学习笔记——哈工大《数据库系统上:模型与语言》
  • 数据库实验11 SQL语言-数据库完整性

    千次阅读 2019-11-11 20:17:11
    数据库实验11 SQL语言-数据库完整性 一.实验环境: ​ MYSQL WORKBENCH 二.实验内容与完成情况: 5. 创建一个教职工表teacher(tno,tname,tage,telphone,tsex,id),将教工号tno设置为主键,性别默认值为"男" create...
  • 数据库完整性定义与检查

    千次阅读 2019-05-21 10:31:34
    实体完整性实验 在列级定义实体完整性: CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY,Sname CHAR(20) UNIQUE,Ssex CHAR(2),Sage SMALLINT, Sdept CHAR(20)); 在表级定义实体完整性: Create table SC(Sno char(9...
  • 第5章 数据库完整性 数据库的完整性是指数据的正确性和相容性
  • 数据库系统概论——第五章 数据库完整性 零. 引言 (1)数据库的完整性: 正确性:是指数据是符合现实世界语义,反映了当前实际状况的 相容性:是指数据库同一对象在不同关系表中的数据是符合逻辑的 (2)完整性与...
  • 关系数据库完整性

    千次阅读 2017-06-10 22:16:32
    数据库完整性约束用于保证数据的正确性。系统在更新、插入或删除等操作时都要检查数据的完整性,核实其约束条件,即关系模型的完整性规则。关系模型中有四类完整性约束:实体完整性、域完整性、参照完整性和用户定义...
  • 第十章 数据库完整性 1. 什么是数据库的完整性? 正确答案: 数据库的完整性是指数据的正确性和相容性。 2. 数据库的完整性概念与数据库的安全性概念有什么区别和联系? 正确答案: 数据的完整性和安全性是两个...
  • 数据库 完整性约束

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

    千次阅读 2022-03-18 21:36:15
    一、什么是数据库完整性 数据库的完整性是指数据库中数据的正确性和相容性。 数据库完整性由各种完整性约束来保证。而完整性约束既可以通过DBMS来保障,也可以通过应用程序来实现。如果是基于DBMS,完整性约束将作为...
  • 数据库完整性设计

    千次阅读 2018-08-21 19:32:57
    1) 唯一约束用来限制不受主键约束的列上的数据的唯一,用于作为访问某行的可选手段,一个表上可以放置多个唯一约束. 2) 只要唯一就可以更新. 3) 即表中任意两行在 指定列上都不允许有相同的值,允许空...
  • 简述数据库的安全性和完整性有什么区别?数据库完整性的全名,关系数据库的参照完整性(Referential Integrity),一般是用在表示多个表之间关系时用的,而且经常使用。数据库的安全性是指保护数据库以防止不合法的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 746,707
精华内容 298,682
关键字:

数据库完整性

友情链接: 802.3ah-2004.zip