首页 > 数据库 >实验三 数据库完整性

实验三 数据库完整性

时间:2024-04-26 14:35:32浏览次数:28  
标签:sno 数据库 spj 实验 pno 完整性 null jno 代码

第1关:定义s表完整性

create table s(
  sno char(2)  PRIMARY KEY,
  sname varchar(10) not null,
  status int,
  city varchar(10) DEFAULT '天津'
);
 

第2关:定义p表完整性

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

第3关:定义j表完整性

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;

第4关:定义spj表完整性

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

第5关:实体完整性测试(1)

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

第6关:实体完整性测试(2)

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

第7关:用户自定义完整性测试(1)

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

第8关:用户自定义完整性测试(2)

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

第9关:参考完整性测试(1)

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

第10关:参照完整性测试(2)

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

第11关:参照完整性测试(3)

 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';

第12关:参照完整性测试(4)

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

第13关:参照完整性测试(5)

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

第14关:参照完整性测试(6)

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

第15关:参照完整性测试(7)

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

第16关:参照完整性测试(8)

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

第17关:级联删除、级联修改

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添加级联删除和级联更新
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;

第18关:级联删除、级联修改测试(1)

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

第19关:级联删除、级联修改测试(2)

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

标签:sno,数据库,spj,实验,pno,完整性,null,jno,代码
From: https://www.cnblogs.com/whwh/p/18159961

相关文章

  • 二十三、数据库性能优化方案
    数据库的优化方案核心本质有三种:减少数据量、用空间换性能、选择合适的存储系统,这也对应了开篇讲解的慢的三个原因:数据总量、高负载、查找的时间复杂度。 一、减少数据量数据序列化存储、数据归档、中间表生成、分库分表。二、用空间换性能该类型的两个方案都是用来应对......
  • Spring Boot应用中如何动态指定数据库,实现不同用户不同数据库的场景
    当在SpringBoot应用程序中使用SpringDataJPA进行数据库操作时,配置Schema名称是一种常见的做法。然而,在某些情况下,模式名称需要是动态的,可能会在应用程序运行时发生变化。比如:需要做数据隔离的SaaS应用。所以,这篇博文将帮助您解决了在SpringBoot应用程序中如何设置动态S......
  • 实验三-软件测试
    一、实验题目:软件测试二、实验目的1、熟悉开发环境下的自动化测试工具;1、利用自动化测试工具进行自动化单元测试。三、实验内容1、选择开发环境,IDEA或PYCHARM任选其一;2、基于所选择的开发环境实现对输入的n个整数进行排序的代码;3、对所编写代码设计测试用例;4、基于所选择......
  • 1、oracle数据库-导入导出
    Oracle数据库的导入导出主要有三种方式:使用pl、sql开发工具导入导出dmp文件方式:这是最常用的导入导出方式,生成的dmp文件是二进制的,可以跨平台操作,并且包含权限信息,也支持大字段数据,使用最广泛。在导出语法中,可以通过指定“full=y”和“ignore=y”参数来进行整个数据库的......
  • 火山引擎VeDI:如何高效使用A/B实验,优化APP推荐系统
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群在移动互联网飞速发展的时代,用户规模和网络信息量呈现出爆炸式增长,信息过载加大了用户选择的难度,这样的背景下,推荐系统应运而生,为用户提供个性化的内容推荐。推荐系统在不断迭代中,其算法、策......
  • 【Qt 专栏】Qt:SQLite数据库操作示例
    转载自:https://blog.csdn.net/qq_40344790/article/details/129521573作者:DevFrank(CSDNC/C++ 优质创作者)1. sqlite介绍SQLite 是一种轻量级的嵌入式关系型数据库管理系统,它是一个开源的、零配置的、自包含的、事务性的SQL数据库引擎。SQLite的设计目标是简单、高效、可......
  • SQL Server实战二:创建、修改、复制、删除数据库表并加以数据处理
      本文介绍基于MicrosoftSQLServer软件,实现数据库表的创建、修改、复制、删除与表数据处理的方法。目录1交互式创建数据库表T2交互式创建数据库表S3T-SQL创建数据库表C4T-SQL创建数据库表SC5T-SQL创建数据库表TC6交互式向数据库表S中添加新列NATIVE7交互式修改数据库......
  • 实验1-波士顿房价预测
    实验1-波士顿房价预测1fromsklearn.linear_modelimportLinearRegression,SGDRegressor,Ridge,LogisticRegression#fromsklearn.datasetsimportload_bostonfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScaler......
  • 20211317 李卓桐 Exp5 信息搜集与漏洞扫描 实验报告
    Exp5信息搜集与漏洞扫描实验报告1、实践目标掌握信息搜集的最基础技能与常用工具的使用方法。2、实践内容(1)各种搜索技巧的应用(2)DNSIP注册信息的查询(3)基本的扫描技术:主机发现、端口扫描、OS及服务版本探测、具体服务的查点(以自己主机为目标)(4)漏洞扫描:会扫,会看报告,会查漏......
  • 实验三
    TASK1点击查看代码#include<stdio.h>#include<stdlib.h>#include<time.h>#include<windows.h>#defineN80voidprint_text(intline,intcol,chartext[]);//函数声明voidprint_spaces(intn);//函数声明voidprint_blank_lines(intn)......