zoukankan      html  css  js  c++  java
  • 数据完整性

    数据完整性

    1.什么是数据完整性?
    存储在数据库中的数据能够正确的反映实际情况,规定数据的输入数据不能是无效值,错误值和乱码等。

    2.数据完整性的类型
    (1)实体完整性:标识符或主键的完整性,使其值唯一
    (2)域完整性:限制类型,格式和取值范围
    (3)引用完整性:保持原表和引用表数据一致性
    (4)用户自定义完整性:根据用户的要求自定义业务规则

    3.数据完整性的实现方式
    实体完整性:主键约束、唯一的约束
    域完整性:检查约束、默认值约束、外键约束
    引用完整性:外键约束
    用户自定义完整性:以上所有约束自由组合

    4.什么是约束?
    通过创建表来限制属性或表中数据的完整性,也可以通过修改语句修改约束条件。

    约束又分为行级约束和表级约束,行级约束和表级约束本质上是一样的,只是约束范围不同。

    非空约束、主键约束一般为行级约束,
    外键约束(联合主键)是表级约束;
    检查约束(check)随意

    二、非空约束
    确保当前约束的属性不为空置,行级约束
    非空约束的关键字: not null

    三、唯一约束
    指定某一列或某几列的数据不能重复
    唯一约束关键字:unique

    可以通过constaint给约束取名,方便根据名称删除约束;

    同时设定非空和唯一默认为主键

    创建复合唯一约束(表级约束)
    对多个列进行唯一约束,约束两个以上的字段(属性)不能同时一致。
    constraint uni_tno_tname unqiue(t_no,t_name)
    这里教师编号与教师名称可以允许其中一个是相同的,但不能同时相同。


    四、主键约束
    非空约束+唯一约束,且每个表只能有一个主键约束(表级),在多列联合的主键约束时,联合主键的值不能重复。
    主键约束关键字:primaty key。
    如果数据表的属性列中存在重复或者null值,就无法以此属性为主键

    1.在创建表时设置主键约束
    设置单列主键
    s_no int primaty key,
    设置多个属性为联合主键
    constraint pri_tno_tname primary key(t_no,t_name)

    2.添加主键约束
    alter table teacher add constraint pri_tno_tname
    primaty key(t_no);

    3.删除主键约束
    alter table teacher drop primary key;
    4.自增列
    在插入数据时,如果不规定属性的值,其值就会根据上一个属性的值自动加1。
    自增列关键字:auto_increment
    属性给空值时,初始默认值从1开始,之后的每一个在其基础上+1。
    在创建时可以在表后设置初始默认值:auto_increment=100
    去掉自增列属性与之前的方法一致。

    五、检查约束
    检查约束就是检查列中属性的取值范围。
    检查约束关键字:check。
    如:t_age int check(age>0 and age<200)
    t_sex varchar(4) check(t_sex='男' or t_sex='女')
    MySQL不支持check,需要在外部进行判断。

    六、默认值约束
    默认值关键字:default
    1.创建表属性时添加默认值约束
    s_subject varchar(20) default 'C++',

    2.添加默认约束
    alter table student modify column

    3.删除默认值约束
    与添加默认值方法一致,只是不加默认值关键字就可以了。

    七、外键约束
    一个表中的属性值参考另一个表中的主属性的值,也就是外键值参考主键值,由于外键约束是表级约束,参考主键值,所以要在创建表之前先创建参考表
    外键约束关键字:foreign key(属性名)reference 表名(属性)
    外键约束属性数据类型必须相同

    1.创建表时建立外键约束
    外键和参考表的主键数据类型,长度和精度要保持一致
    c_no int not null
    constraint for_cno foreign key(cno)

    2.添加外键约束
    由于外键约束是表级约束,需要关键字add。
    alter table strudent add constraint for_cno
    froeign key(c_no) references class(class_no);

    3.删除外键约束
    alter table student drop constraint for_cno;

    4.级联更新/删除
    是指父表中的元组更新或删除等操作对子表的处理方法。
    其中有三种处理方式,分别是:
    在更新/删除中(on update/on delete)
    (1)cascade:父表中的元组更新或删除,子表中跟着更新或删除。在语句之后加上on update(或on delete)cascade
    (2)no action:无动作,若子表中有匹配的记录,就不允许更新或删除父表数据。加上on update(或on delete)no action
    (3)set null:设置为空,若子表中有匹配的记录,父表数据更新或删除,子表中对应数据变为null。on update set null

    这些操作是对于父表的更新或者删除而言的,
    使用格式:on update(cascade/no action/set null)
    列如:on update cascade,
    on delete (cascade/no action/set null)
    列如:on delete set null;

  • 相关阅读:
    Solved:Spring Junit Test NoSuchMethodError
    Stack实现
    CLRS10.2-8练习
    CLRS10.2-7练习
    CLRS10.2-4练习
    CLRS10.1-7练习
    CLRS10.1-6练习
    算法:吸血鬼数字算法
    CLRS最大子数组问题
    VS快捷键
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/11706020.html
Copyright © 2011-2022 走看看