百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

数据库系统之实体完整性约束(简述实体完整性约束的作用)

toyiye 2024-07-08 22:47 14 浏览 0 评论

数据库完整性

今天做了一道数据库的上机题,其中的一些知识觉得挺有用的,因此打算整理出来一篇博客来与大家分享一下。这里的语句针对的都是创建表后所需要的语句。

一、题目

1.练习定义三类完整性:
(1)为student表添加主码约束
(2)为course表添加主码和外码约束
(3)为sc表添加主码和外码约束
(4)为course表添加cname取值唯一的约束
(5)为course表添加credit默认值为4的default约束
(6)为student表添加check约束,ssex取值只能为男或女。
2.验证上面添加的约束
(1) 将student表中学号为201910122的学号修改为201215123,验证主码约束机制。
(2) 将course表中课程号为6的先行课号修改为9,验证外码约束机制。
(3) 向sc表中添加一条记录,(’666666666’,’1’,80),验证外码约束机制。
(4) 修改student表中学号为201215122的学生记录,将学号修改为‘11111’验证外码约束机制。
(5) 删除student表中学号为201215122的学生记录,验证外码约束机制。
(6) 将course表中课程号为2号的课程名称修改为数据库,验证唯一约束机制。
3.删除上面添加的约束
(1)删除student表的主码约束
(2)删除course表的外码约束
(3)删除course表中cname取值唯一的约束

二、题目准备

此次上机需要的各个数据库各个字段的数据类型为:

1.student表

2.course表

3.sc表

此次上机需要的各个数据库数据为:

1.student表

2.course表

3.sc表

三、题目分析

1.练习定义三类完整性:

(1)为student表添加主码约束

添加主码约束的MySQL语句是:alter table 表名 add primary key(列名);

因为主码必须需要唯一并且数据不能重复,发现在student表中只有sno(学号)是每个人唯一标识。

因此这里只需输入这个语句即可:alter table student add primary key(sno);

最后检验是否成功,输入desc student;

(2)为course表添加主码和外码约束

1.添加主码约束

根据第一步我们可以知道cno(课程号)是唯一标识

因此添加主码约束的语句是:alter table course add primary key(cno);

最后检验是否成功,输入desc course;

2.添加外码约束

添加外码约束的MySQL语句是:alter table 表名 add constraint 约束名 foreign key(关联字段) references 主表(关联字段)

其中constraint 约束名可以省略,即也可以写成:alter table 表名 add foreign key(关联字段) references 主表(关联字段)

首先先尝试一下使用course表的cpno来参照sc表的cpno:

alter table course add foreign key(cpno) references sc(cpno);

,发现报错

这是因为在参照时候,参照的和被参照的都需要是同一种数据类型和长度,比如tinyint类型的只能参照tinyint类型的,不能参照char(9)类型的。同样的,数据长度不一样也不能进行参照,char(9)类型的也不能参照char(4)的

因此我们把cpno的数据类型更改一下再试一次

先更改cpno字段的数据类型:alter table sc modify cpno tinyint;

然后再次输入上面的语句。

成功了

(3)为sc表添加主码和外码约束

1.添加主码约束

根据第一步我们可以知道cpno是唯一标识

因此添加主码约束的语句是:alter table sc primary key(cpno);

最后检验是否成功,输入desc sc;

2.添加外码约束

使用sc表的sno参照student的sno:alter table sc add foreign key(sno) references student(sno);

(4)为course表添加cname取值唯一的约束

添加取值唯一约束的MySQL的语句是:alter table 表名 add unique(列名);

因此我们输入:alter table course add unique(cname);

使用desc course;验证一下

其中PRI表示主键

UNI表示取值唯一约束

MUL表示外键

(5)为course表添加credit默认值为4的default约束

添加default约束的MySQL语句是:alter table 表名 alter 列名 set default '默认值';

因此输入:alter table course alter credit set default '4';

最后检验是否成功,输入desc course;

(6)为student表添加check约束,ssex取值只能为男或女。

添加check约束的MySQL语句是:alter table 表名 add check(约束条件);

因此这条语句是:alter table student add check(ssex="男" or ssex="女");

2.验证上面添加的约束

(1) 将student表中学号为201910122的学号修改为201910123,验证主码约束机制。

修改元组的MySQL语句为:update 表名 set 列名=表达式 where 条件;

实现语句为:update student set sno='201910123' where sno='201910122';

此处表达的意思是因为有外码约束,所以不能修改。

但是如果没有这个外码约束,它也修改不了。

我们知道,主码的每个元组都必须不一样,我们先看下我们的student表

其中sno是我们的主键,其中已经有‘201910123‘这个数据,因此根据主码约束我们也修改不了

(2) 将course表中课程号为3的先行课号修改为4,验证外码约束机制。

根据第一步可以知道,实现语句为:update course set cno=4 where cno=3;

此处是因为cno是course的主键,所以此处报的是主键错误

没有验证的原因是因为我们在设置外码的时候吗,没有让别的外键关联这个表的cno

如果想要实现的话,我们可以再添加一条关联

语句为:alter table sc add foreign key(cno) references course(cno);

然后再验证就会报因为外码约束而错误了。

(3) 向sc表中添加一条记录,(’666666666’,’1’,8,80),验证外码约束机制。

向表中追加元组的MySQL语句是:insert into 表名 values(值,值,···);

实现语句是:insert into sc values('666666666','1',8,80);

这个错误意思是关联强制约束造成的错误,即因为外码约束机制引起的错误。

(4) 修改student表中学号为201910122的学生记录,将学号修改为‘11111’验证外码约束机制。

实现语句为:update student set sno='11111' where sno='201910122';

此处也成功验证了外码约束机制。

(5) 删除student表中学号为201910122的学生记录,验证外码约束机制。

删除元组的MySQL语句是:delete from 表名 where 条件;

因此实现语句是:delete from student where sno='201910122';

成功验证外码约束机制。

(6) 将course表中课程号为2号的课程名称修改为数据库,验证唯一约束机制。

实现语句是:update course set cname="数据库" where cno=2;

此处我们首先查看一下course表的内容:

此处我们发现课程号为1的课程名已经是数据库了,由唯一约束机制可知,cname的数据必须是唯一的,所以报错。

成功验证唯一约束机制。

3.删除上面添加的约束

(1)删除student表的主码约束

首先删除主码约束的MySQL语句是:alter table 表名 drop primary key;

我们先输入一下

此时我们发现一个问题,语句并没有错,但是不能删除。

我们看一下错误内容:不能删除主键:被某个外键所需要

因此我们也就知道了,要是我们想要删除这个主键,必须先让那个外键与这个主键的关联断开才行。

通过查看前面的语句,我们发现,这个外键是由sc表的sno与student表的sno关联

删除外码约束的MySQL语句是:alter ![](https://img2020.cnblogs.com/blog/2309068/202110/2309068-20211015114119542-185235895.png) table 表名 drop foreign key 外码名;

那么这个外码名怎么知道呢,我们之前在创建的时候并没有给它起别名,那么这个外码名就是sno吗?

不,并不是。

我们来查看一下,输入show create table sc;

此时我们就能发现外码名并不是sno,而是系统自动生成的一个名:sc_ibfk_1

因此删除此处实现删除外码的语句是:alter table sc drop foreign key sc_ibfk_1;

删除成功,此时我们再试一下删除student的主码,再次输入:alter table student drop primary key;

student表的主码删除成功。

(2)删除course表的外码约束

根据第一步可知,我们首先应该查找course表的外码名,

输入语句:show create table course;

可以发现外码名为course_ibfk_1

因此实现语句为:alter table course drop foreign key course_ibfk_1;

删除course表的外码成功。

(3)删除course表中cname取值唯一的约束

删除取值唯一约束的MySQL语句是:alter table 表名 drop key 约束名;

输入:show create table course;

可以发现约束名为cname

实现语句为:alter table course drop key cname;

删除成功。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码