数据库:头歌实验三数据库完整性

一、定义s表完整性

编程要求

请按下面s表的结构定义完整性; sno主码,sname非空、city缺省值为天津。

create table s(
  sno char(2),
  sname varchar(10),
  status int,
  city varchar(10)
);

use demo;#代码开始#定义s表; sno主码,sname非空、city缺省值为天津。
CREATE TABLE s(sno CHAR(2) PRIMARY KEY,sname VARCHAR(10) NOT NULL,status int,city VARCHAR(10) DEFAULT'天津'
);#代码结束show create table s;

二、定义p表完整性

编程要求

请按下面p表的结构定义完整性; pno主码,pname非空、color只能取红、蓝、绿。

create table p(
  pno char(2),
  pname varchar(10),
  color char(1),
  weight int
);

use demo;#代码开始#定义p表; pno主码,pname非空、color只能取红、蓝、绿CREATE TABLE p(pno CHAR(2) PRIMARY KEY,pname VARCHAR(10) NOT NULL,color char(1),CHECK(((color = '红')or(color = '蓝')or(color = '绿'))),weight int
);#代码结束show create table p;

三、定义j表完整性

编程要求

请按下面j表的结构定义完整性; jno主码, jname非空。

create table j(
  jno char(2),
  jname varchar(10),
  city varchar(10)
);

use demo;#代码开始#定义j表; jno主码, jname非空CREATE TABLE j(jno CHAR(2) PRIMARY KEY,jname VARCHAR(10)  NOT NULL,city varchar(10)
);#代码结束show create table j;

四、定义spj表完整性

编程要求

请按下面spj表的结构定义完整性; (sno,pno,jno)主码,参照sno、pno、jno外码,外键约束名称依次为fk_spj_sno、fk_spj_pno、fk_spj_jno。

create table spj(
  sno char(2),
  pno char(2),
  jno char(2),
  qty int
);

use demo;#代码开始#定义spj表; (sno,pno,jno)主码,参照sno、pno、jno外码
#外键约束名称依次为fk_spj_sno、fk_spj_pno和fk_spj_jno。
CREATE TABLE spj(sno CHAR(2),pno CHAR(2),jno CHAR(2),qty int,PRIMARY KEY(sno,pno,jno),CONSTRAINT fk_spj_sno FOREIGN KEY(sno) REFERENCES s(sno),CONSTRAINT fk_spj_pno FOREIGN KEY(pno) REFERENCES p(pno),CONSTRAINT fk_spj_jno FOREIGN KEY(jno) REFERENCES j(jno)
);#代码结束show create table spj;

五、实体完整性测试(1)

编程要求

设计相关实验用例数据,观察数据运行结果。
(1)在s表中插入违反约束的数据,主码为null值

测试说明

平台会对你编写的代码进行测试:

预期输出:

ERROR 1048 (23000) at line 7: Column 'sno' cannot be null

use demo;#代码开始
#设计相关实验用例数据,观察数据运行结果。
#(1)在s表中插入违反约束的数据,主码为null值INSERT INTO s VALUES( NULL, NULL, NULL, NULL );#代码结束

六、实体完整性测试(2)

编程要求

设计相关实验用例数据,观察数据运行结果。
(2)在s表中插入违反约束的数据,主码取重复值

测试说明

平台会对你编写的代码进行测试:

预期输出:

ERROR 1062 (23000) at line 6: Duplicate entry 'S1' for key 's.PRIMARY'

use demo;#代码开始
#设计相关实验用例数据,观察数据运行结果。
#(2)在s表中插入违反约束的数据,主码取重复值INSERT INTO s VALUES ( 'S1', 'S1', NULL, NULL );#代码结束

七、用户自定义完整性测试(1)

编程要求

设计相关实验用例数据,观察数据运行结果。
(1)在p表中插入违反约束的数据,用户定义完整性(pname非空)

测试说明

平台会对你编写的代码进行测试:

预期输出:

ERROR 1048 (23000) at line 6: Column 'pname' cannot be null

use demo;#代码开始
#设计相关实验用例数据,观察数据运行结果。
#(1)在p表中插入违反约束的数据,用户定义完整性(pname非空)INSERT INTO p VALUES( "P1", NULL, NULL, NULL );
#代码结束

八、用户自定义完整性测试(2)

编程要求

设计相关实验用例数据,观察数据运行结果。
(2)在p表中插入违反约束的数据,用户定义完整性(color只能取红、蓝、绿)

测试说明

平台会对你编写的代码进行测试:

预期输出:

ERROR 3819 (HY000) at line 6: Check constraint 'p_chk_1' is violated.

use demo;#代码开始
#设计相关实验用例数据,观察数据运行结果。
#(2)在p表中插入违反约束的数据,用户定义完整性(color只能取红、蓝、绿)
INSERT INTO p VALUES( 'p2', "p2", "黄", NULL );
#代码结束

九、参考完整性测试(1)

编程要求

设计相关实验用例数据,观察数据运行结果。
(1)在spj表中插入违反约束的数据,外码取null值

测试说明

平台会对你编写的代码进行测试:

预期输出:

ERROR 1048 (23000) at line 7: Column 'sno' cannot be null

use demo;#代码开始
#设计相关实验用例数据,观察数据运行结果。
#(1)在spj表中插入违反约束的数据,外码取null值
INSERT INTO spj VALUES( "p1", "p1", NULL, NULL );#代码结束

十、参照完整性测试(2)

编程要求

设计相关实验用例数据,观察数据运行结果。
(2)在spj表中插入违反约束的数据,外码取对应主码没有的值

原始数据如下:

测试说明

平台会对你编写的代码进行测试:

预期输出:

ERROR 1452 (23000) at line 6: Cannot add or update a child row: a foreign key constraint fails (`demo`.`spj`, CONSTRAINT `fk_spj_sno` FOREIGN KEY (`sno`) REFERENCES `s` (`sno`))

use demo;#代码开始
#设计相关实验用例数据,观察数据运行结果。
#(2)在spj表中插入违反约束的数据,外码取对应主码没有的值
INSERT INTO spj VALUES( 'ok', 'ok', 'ok', 100 );#代码结束

十一、参照完整性测试(3)

编程要求

设计相关实验用例数据,观察数据运行结果。
(3)在spj表中修改外码值,取对应主码已有的值(将S1,P1,J1的记录改为由S5供应)

测试说明

平台会对你编写的代码进行测试:

预期输出:

sno    pno    jno    qty
S5    P1    J1    200

 use demo;#代码开始
#设计相关实验用例数据,观察数据运行结果。
#(3)在spj表中修改外码值,取对应主码已有的值(将S1,P1,J1的记录改为由S5供应)
UPDATE spj SET sno = "S5" 
WHERE sno = "S1" AND pno = "P1" AND jno = "J1";#代码结束select * from spj where sno='S5' and pno='P1' and jno='J1';

十二、参照完整性测试(4)

编程要求

设计相关实验用例数据,观察数据运行结果。
(4)在spj表中修改外码值,取对应主码没有的值(将S1,P1,J1的记录改为由S7供应)

测试说明

平台会对你编写的代码进行测试:

预期输出:

ERROR 1452 (23000) at line 6: Cannot add or update a child row: a foreign key constraint fails (`demo`.`spj`, CONSTRAINT `fk_spj_sno` FOREIGN KEY (`sno`) REFERENCES `s` (`sno`))

 use demo;#代码开始
#设计相关实验用例数据,观察数据运行结果。
#(4)在spj表中修改外码值,取对应主码没有的值(将S1,P1,J1的记录改为由S7供应)
UPDATE spj SET sno = "S7" 
WHEREsno = "S1" AND pno = "P1" AND jno = "J1";#代码结束

十三、参照完整性测试(5)

编程要求

设计相关实验用例数据,观察数据运行结果。
(5)删除被参照表J未引用的主码值J7

测试说明

平台会对你编写的代码进行测试:

预期输出:

jno    jname    city
J1    三建    北京
J2    一汽    长春
J3    弹簧厂    天津
J4    造船厂    天津
J5    机车厂    唐山
J6    无线电厂    常州

 use demo;#代码开始
#设计相关实验用例数据,观察数据运行结果。
#(5)删除被参照表J未引用的主码值J7
DELETE FROM j WHERE jno = "J7";#代码结束select * from j;

十四、参照完整性测试(6)

编程要求

设计相关实验用例数据,观察数据运行结果。
(6)删除被参照表S引用的主码值S1

测试说明

平台会对你编写的代码进行测试:

预期输出:

ERROR 1451 (23000) at line 6: Cannot delete or update a parent row: a foreign key constraint fails (`demo`.`spj`, CONSTRAINT `fk_spj_jno` FOREIGN KEY (`jno`) REFERENCES `j` (`jno`))

 use demo;#代码开始
#设计相关实验用例数据,观察数据运行结果。
#(6)删除被参照表S引用的主码值S1
DELETE FROM	s WHERE	s.sno = "S1";#代码结束

十五、参照完整性测试(7)

编程要求

设计相关实验用例数据,观察数据运行结果。
(7)修改被参照表未引用的主码值(将J表J6改为J8)

测试说明

平台会对你编写的代码进行测试:

预期输出:

jno    jname    city
J1    三建    北京
J2    一汽    长春
J3    弹簧厂    天津
J4    造船厂    天津
J5    机车厂    唐山
J7    半导体厂    南京
J8    无线电厂    常州

 use demo;#代码开始
#设计相关实验用例数据,观察数据运行结果。
#(7)修改被参照表未引用的主码值(将J表J6改为J8)
UPDATE j SET jno = "J8" WHERE	jno = "J6";#代码结束select * from j;

十六、参照完整性测试(8)

编程要求

设计相关实验用例数据,观察数据运行结果。
(8)修改被参照表引用的主码值(将S表S5改为S7)

测试说明

平台会对你编写的代码进行测试:

预期输出:

ERROR 1451 (23000) at line 6: Cannot delete or update a parent row: a foreign key constraint fails (`demo`.`spj`, CONSTRAINT `fk_spj_jno` FOREIGN KEY (`jno`) REFERENCES `j` (`jno`))

 use demo;#代码开始
#设计相关实验用例数据,观察数据运行结果。
#(8)修改被参照表引用的主码值(将S表S5改为S7)
UPDATE s SET sno = "S7" WHERE	sno = "S5";#代码结束

十七、级联删除、级联修改

编程要求

设计相关实验用例数据,观察数据运行结果。
三、将外码改成级联删除、级联修改
提示:先删除外键约束,再添加级联删除和级联更新。
原表定义外键约束名称依次为fk_spj_sno、fk_spj_pno、fk_spj_jno。

测试说明

平台会对你编写的代码进行测试:

预期输出:

Table    Create Table
spj    CREATE TABLE `spj` (\n  `sno` char(2) NOT NULL,\n  `pno` char(2) NOT NULL,\n  `jno` char(2) NOT NULL,\n  `qty` int DEFAULT NULL,\n  PRIMARY KEY (`sno`,`pno`,`jno`),\n  KEY `fk_spj_pno` (`pno`),\n  KEY `fk_spj_jno` (`jno`),\n  CONSTRAINT `fk_spj_jno` FOREIGN KEY (`jno`) REFERENCES `j` (`jno`) ON DELETE CASCADE ON UPDATE CASCADE,\n  CONSTRAINT `fk_spj_pno` FOREIGN KEY (`pno`) REFERENCES `p` (`pno`) ON DELETE CASCADE ON UPDATE CASCADE,\n  CONSTRAINT `fk_spj_sno` FOREIGN KEY (`sno`) REFERENCES `s` (`sno`) ON DELETE CASCADE ON UPDATE CASCADE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

use demo;#代码开始
#三、将外码改成级联删除、级联修改(原表定义外键约束名称依次为`fk_spj_sno`、`fk_spj_pno`、`fk_spj_jno`)。
#1、删除外键约束
ALTER TABLE spj DROP FOREIGN KEY fk_spj_sno;
ALTER TABLE spj DROP FOREIGN KEY fk_spj_pno;
ALTER TABLE spj DROP FOREIGN KEY fk_spj_jno;#2、修改表spj添加级联删除和级联更新(外键约束名称依次为`fk_spj_sno`、`fk_spj_pno`、`fk_spj_jno`)
ALTER TABLE spj ADD CONSTRAINT fk_spj_pno FOREIGN KEY(pno) REFERENCES p (pno) ON DELETE CASCADE ON update CASCADE;
ALTER TABLE spj ADD CONSTRAINT fk_spj_jno FOREIGN KEY(jno) REFERENCES j (jno) ON DELETE CASCADE ON update CASCADE;
ALTER TABLE spj ADD CONSTRAINT fk_spj_sno FOREIGN KEY(sno) REFERENCES s (sno) ON DELETE CASCADE ON update CASCADE;#代码结束show create table spj;

十八、级联删除、级联修改测试(1)

编程要求

设计相关实验用例数据,观察数据运行结果。
(1)删除被参照表S引用的主码值S1

测试说明

平台会对你编写的代码进行测试:

use demo;#代码开始
#设计相关实验用例数据,观察数据运行结果。
#(1)删除被参照表S引用的主码值S1DELETE FROM	s WHERE	s.sno = "S1";#代码结束
select * from s;
select * from spj;

十九、级联删除、级联修改测试(2)

编程要求

设计相关实验用例数据,观察数据运行结果。
(2)修改被参照表S,将引用的主码值S5改为S7

测试说明

平台会对你编写的代码进行测试:

use demo;#代码开始
#设计相关实验用例数据,观察数据运行结果。
#(2)修改被参照表S,将引用的主码值S5改为S7
UPDATE s SET s.sno = "S7" WHERE	s.sno = "S5";#代码结束select * from s;
select * from spj;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/411650.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CAN Intel格式与Motorola格式的区别

在CAN(Controller Area Network)通信中,CAN报文的编码格式对于数据的有效传输和准确解析至关重要。CAN报文的编码格式主要包括Intel格式和Motorola格式。尽管这两种格式在单个字节内部的数据表示上是一致的,但在处理跨字节数据时&…

el-dialog中使用el-uplode滚动条穿模问题

问题: 解决办法:在dialog中添加 append-to-body属性 原因: append-to-body 属性用于将 el-dialog 组件附加到 body 元素,而不是它的父元素。这在某些情况下非常有用,例如: 避免滚动条穿模问题:…

PHP多功能投票系统小程序源码社群决策与趣味互动新潮流

🌟【引领社群新风尚,一键决策更轻松】🌟 你还在为社群活动意见不合而烦恼吗?多功能投票小程序来拯救你的选择困难症!无论是团队项目方案、周末出游地点,还是晚餐吃什么的小纠结,只需轻轻一点&a…

Python+VScode 两个不同文件夹里的py文件相互调用|python的模块调用|绝对导入

第一次用VScode写python遇到了模块无法识别的问题,搞了一整天, 上网查,chatGPT都不行,现在时解决了。 首先项目结构如下,四个文件夹,四个py文件 代码: def f1fun():print("f1") de…

Linux---FTP文件服务器搭建及实战

一、FTP简介 FTP: File Transfer Protocol文件传输协议 FTP是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者…

谷粒商城实战笔记-282~283-商城业务-订单服务-提交订单的问题

文章目录 一,282-商城业务-订单服务-提交订单的问题调试过程中出现的问题services面板介绍什么是 Services Panel?主要作用解决的痛点使用方法 二,283-商城业务-分布式事务-本地事务在分布式下的问题分布式事务问题解决方案分布式事务处理流程…

福建聚鼎:装饰画做起来一家店铺需要多久

在如今快节奏、高效率的社会环境中,许多人追求即时满足,希望所有事情都能迅速完成。然而,在艺术的世界里,时间往往是一个被精心雕琢的概念。今天,让我们来探讨一下,如果从零开始做起来一家装饰画店铺&#…

解决Selenium元素拖拽不生效Bug

前几天在使用Selenium进行元素拖拽操作时,发现Selenium自带的元素拖拽方法(dragAndDrop())不生效,网上的回答也是五花八门,比较混乱,尝试了以下几种方法均无法解决。 方案1:通过dragAndDrop()方…

Nucleus创建LocalServer后没有localhost

1.问题 在Omniverse平台上使用Nucleus模块时,需要本地创建一个Server,然后安装。安装完成后如下图所示。 会发现在Omniverse下是空的,没有localhost,需要点击Add Server,弹出如下所示。 然后输入创建之前的用户名和密码…

51单片机串口通信

一.通信 1.通信认识 随着多微机系统的广泛应用和计算机网络技术的普及,计算机的通信功能愈来愈显得重要。计算机通信是指单片机与外部设备(传感器)或计算机与计算机之间的信息交换。通信有并行通信和串行通信两种方式。在多微机系统以及现代…

工作中常用的100个知识点

1. Permission deniedGit解决Permission denied, please try again问题_git permission denied, please try again.-CSDN博客 cd ~/.ssh/ 回车,进入.ssh路径下; 接下来在.ssh路径下配置全局的name和email,输入以下命令: git con…

sql-labs41-45关通关攻略

第41关 一.查询数据库 http://127.0.0.1/Less-41/?id-1%20union%20select%201,2,database()--http://127.0.0.1/Less-41/?id-1%20union%20select%201,2,database()-- 二.查表 http://127.0.0.1/Less-41/?id-1%20union%20select%201,2,(select%20group_concat(table_name)…

青岛实训day33(8/21)

1、配置一主二从mysql 1. mycat对mysql8不完全支持 2. mysql8主从问题不大get_pub_key1 3. gtids事务复制 4. 删除/etc/my.cnf 5. 同步data文件需要先停用mysql服务,删除data目录中的auto.cnf 6. gtid模式以及经典模式都需要锁表 flush tables with read lock;unlock tables;…

想学gis开发,java和c++哪个比较好?

java与C的应用场景不同,究竟选择谁,应该由开发者的兴趣方向来决定。 你选择Java,意味着以后的业务方向就是偏后台服务开发,如果你非得说我用java也可以写界面,对不起,别人不会。不管是从项目还是产品的角度…

【Redis】Redis 的消息队列 List、Streams—(六)

目录 一、消息队列二、List 方案三、Streams 方案 一、消息队列 我们一般把消息队列中发送消息的组件称为生产者,把接收消息的组件称为消费者,下图是一个通用的消息队列的架构模型: 消息队列在存取消息时,必须要满足三个需求&…

超详细超实用!!!java开发之IntelliJ IDEA下载与安装破解以及汉化教程(三)

云风网 云风笔记 云风知识库 一、安装包下载 1、官网下载 2、ideaIU-2024.2.0.2.exe 百度网盘资源 安装包下载完成后进行傻瓜式下一步安装就可以了 二、破解激活 由于IntelliJ IDEA可免费一个月,后续需要付费购买激活码,这里采用破解激活的方式 将…

从零上手CV竞赛Task2 # Datawhale AI夏令营

文章目录 平台参赛平台云平台 Task 1 从零上手CV竞赛下载baseline相关文件一键运行baseline!(大约需要25分钟)赛题解析数据集提交结果违法标准注意事项 下载生成的文件结果如图最后要记得关机 不然一直消耗算力 Task 2 建模方案解读与进阶物体…

从 0 到 1 的Prompt 教程,来自Claude 官方,不会写 prompt的看这个足够

Claude 的强大,最近得到了很多网友的验证,甚至效果上面大有超越 GPT的许多声音。 所以从优秀的 Claude 中学习,将会是一个很好的起点。 这里,Claude 的开发者们提供了一个相当详细的 Prompt Engineering 教程。 这个教程能够全面…

若依后端 MyBatis改为MyBatis-Plus

引用 1.引入MyBatis-Plus依赖 在总目录的pom.xml&#xff0c;导入依赖 <mybatis-plus.version>3.4.3</mybatis-plus.version> <!-- mybatis-plus 增强CRUD --> <dependency> <groupId>com.baomidou</groupId> <artifactId>…

计算机毕业设计选题推荐-医院门诊预约-医院预约挂号微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…