阅读 239

数据库的完整性约束(数据库的完整性约束与触发器实验)

  • 数据库基本常识的简介及mysql安装

  • 结构化查询语言sql

  • 数据库表介绍

  • 数据库的数据类型

  • 数据操作语言DML——数据的增删改查

  • 数据库对象操作语言DDL——修改、删除数据库表等对象

接下来介绍一下数据库的完整性约束。

完整性约束的作用:保证数据库中数据的准确性和一致性。

约束在作用上可以分为两类:

  • 表级约束:可以约束表中任意一个或多个字段,与列定义相互独立,不包含在列定义中;与定义用”,“分割;必须指定要约束的列的名称。

  • 列级约束:包含在列定义中,直接跟在该列的其他定义之后,用空格分割,不需要指定列名。

完整性约束可以分为非外键约束和外键约束

  • 非外键约束主要包括以下几种(后面紧跟的是列级约束的写法)

    • 主键约束:primary key。主键的作用是,通过主键所在的字段可以查询到唯一一条数据。主键的要求是不能为空,并且是唯一的。也就是说主键这一列必须有东西,并且每个行的主键位置的信息不能重复。主键的使用在创建表的时候,在这一列的语句中加入primary key即可。

    • 自增约束:auto_increment。作用是,这个字段可以自己添加,但是字段类型必须是int(integer)类型。在插入的时候这个字段可以设置为null或者default都可。如果sql报错,则这个递增的就浪费了。此外自增必须应用在主键上。

    • 非空约束:not null。作用是,这个字段的内容不能为空,也就是必须有内容。

    • 唯一约束:unique。作用是,这个字段在这个表中的信息是不重复的。注意这里没有限制非空,所以与主键是有区别的。

    • 默认值:default。作用是,如果这个字段在插入的时候不写,我们可以设置默认值。用法:default 默认值。

    • 检查约束(mysql8之后的):check。作用是检查字段的内容。用法:check(字段=内容||字段=内容and字段=内容)

  • 上面介绍的是非外键约束的列级约束写法,也就是直接跟在表创建的时候写。下面说一下这些约束的表记约束的写法

    • constraint 约束名 约束条件 (列名[条件])

    • 这里的列名是必须的,条件有时候是需要的。例如检查约束的写法:constraint 约束名 check (sex = ‘男’ || sex = ‘女’)

  • 注意表级约束跟列级约束基本一致,只不过写法不同而已。但是自增约束、非空约束、默认值约束只能使用列级约束,也就是说auto_increment、not null和default只能写在某一列后面。

  • 如果使用列级约束,并且系统抛出错误。例如使用检查约束设置性别只能是男女,那么输入其他的之后,则会出错。这时候违反的约束,系统会自动命名。但是如果我们使用表级约束,则会按照我们定义的约束名,方便错误的排查。

  • 在创建表之后添加约束:

    • 命令语句:alter table 表名 add constraint 约束名 约束条件 (列名[条件]);

    • 想要添加auto_increment的语句:alter table 表名 modify 列名 类型(限制) auto_increment;这就是相当于对之前的列字段重新定义了。

  • 查看表结构:desc 表名;

  • 接下来介绍一下外键约束

    • 建表的时候:constraint 约束名 foreign key (本表中的字段) references 主表名称(主表中的主键或者主表中的唯一约束的字段);

    • 建表之后:alter table 表名 add constraint 约束名 foreign key (本表中的字段) references 主表名称(主表中的主键或者主表中的唯一约束的字段);
      在这里插入图片描述

    • 可以将两张表紧密结合起来

    • 数据不会重复

    • 修改时效率高

    • 外键是指:表中的某一字段,依赖于另外一张表中某个字段的值。而被依赖的字段必须是主键约束或者唯一约束。被依赖的表通常称为父表或主表,而设置外键约束的表通常称为子表或从表。

    • 主表中的字段称为主键,子表中的字段称为外键。例如学生表中一个班级字段关联到班级表id,则学生表的这个字段为外键,班级表的id为主键。学生表是子表,班级表是父表。

    • 外键约束的主要好处是

    • 需要先创建父表,再创建子表;先删子表,再删除父表。并且外键约束只有表级约束,没有列级约束。

    • 命令语句:

  • 接下来说一下外键策略,也就是说如果有子表关联主表,主表的数据不能删除的时候,可以使用一些策略。

    • 用法(在子表中创建外键约束的时候,如果已经有了则删除之前的外键约束):

    • 删除之前的外键约束:alter table (子)表名 drop foreign key 约束名;

    • 重新添加带有级联操作的外键约束(这里对修改和删除都添加了级联操作):alter table (子)表名 add constraint 约束名 foreign key (本表中的字段) references 主表名称(主表中的主键或者主表中的唯一约束的字段) on update cascade on delete cascade;

    • no action:不允许操作。写sql,让要删除的部分的关联取消掉,或者说关联到其他一行。例如要删除班级表中id=2的,可以将学生表中班级为2的先修改到其他班或者设置为null。

    • cascade:级联操作。操作主表的时候,会影响子表,例如将班级表中id=2的改成id=5,则之前学生表班级id=2的也会变成5。如果删除班级表id=2的,那么学生表中班级id为2的学生也会跟着删除。

    • set null:置空操作。操作主表的时候,子表的值会变成null。用法与级联操作类似。但是在之前写on update cascade和on delete cascade的时候换成 on update set null和on delete set null;

    • 一般情况下,我们会将update设置为级联操作,而delete设置为置空操作。

标签:数据库,外键,约束,完整性,表中,子表,主表,主键
来源: https://blog.csdn.net/qq_39056803/article/details/121444340


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐