【SQL Server数据库】数据库完整性实验

目录

一、要求

1、认真学习三类完整性、CHECK短语、CONSTRAINT字句的使用,完成下列内容。

1.1 根据上表,在TEST数据库中建立数据表Table1。

1.2 在TEST数据库中创建Table2,只含各个基本列(包括列名和数据类型,标识种子和计算列)

1.3 Table1中的外键能否在创建Table1表时建立?如不能,该何时、如何创建?请写出相应的SQL代码。

1.4 通过ALTER TABLE语句对Table2进行表定义修改,为其增加各个约束。

2、验证数据库约束

2.1 准备好1、中要求的两个数据表Table1,Tabel2。

2.2 验证主键(PRIMARY KEY)约束

2.3 验证外键(FOREIGN)约束

2.4 验证唯一性(UNIQUE)约束

2.5 验证检查(CHECK)约束

二、小结

1.什么是数据库的完整性?

2. 思考各类完整性约束对于数据库的数据检查有何作用? 

3. 心得或总结


一、要求

用SQL语句完成下列功能使用SQL对数据进行完整性控制(三类完整性、CHECK短语、CONSTRAIN字句、触发器)。用实验证实,当操作违反了完整性约束条件时,系统是如何处理的。

1、认真学习三类完整性、CHECK短语、CONSTRAINT字句的使用,完成下列内容。

Table1:

列名

中文解释

数据类型

空值

说明

Class_id

班级编号

Varchar(6)

主键

Class_name

班级名称

Varchar(20)

Director

班主任

Varchar(4)

Monitor

班长

Int

外键,Table2(Stu_id)

Table2:

列名

中文解释

数据类型

空值

说明

Stu_id

学号

Int

主键,标识种子(201801,1)

Stu_name

姓名

Varchar(10)

唯一性约束

Stu_sex

性别

Varchar(2)

默认值为“女”

Birthdate

出生日期

Smalldatetime

Age

年龄

计算列,计算公式:

year(getdate())-year(birthdate)

Phone

联系电话

Varchar(8)

‘3935’开头,共8位数字

Class_id

班级编号

Varchar(6)

外键,Table1(Class_id)

# 创建数据库
create database TESTon (name = 'TEST_dat',filename ='D:\DB\TEST.mdf',size = 5,maxsize =10)log on (name ="TEST_log",filename ='D:\DB\TEST.log',size =5,maxsize =10)

1.1 根据上表,在TEST数据库中建立数据表Table1。

create table Table1(Class_id   varchar(6)  not null,Class_name varchar(20) not null,Director   varchar(4),Monitor    intconstraint pk_classid primary key (Class_id))

1.2 在TEST数据库中创建Table2,只含各个基本列(包括列名和数据类型,标识种子和计算列)

create table Table2(Stu_id    int identity (201801,1),Stu_name  varchar(10),Stu_sex   varchar(2),Birthdate smalldatetime,Age       as year(getdate()) - year(Birthdate),Phone     varchar(8),Class_id  varchar(6))

1.3 Table1中的外键能否在创建Table1表时建立?如不能,该何时、如何创建?请写出相应的SQL代码。

-- 不能,需要Table2建完且设置好主键才可以创建Table1的外键alter table Table2add constraint pk_id primary key (Stu_id);alter table Table1add constraint fk_Stu_id foreign key (Monitor) references Table2 (Stu_id);

1.4 通过ALTER TABLE语句对Table2进行表定义修改,为其增加各个约束。

(注意:空值约束应单独添加)

-- 学号(非空)alter table Table2 alter column Stu_id int not null;-- 姓名(非空,唯一性约束)alter table Table2 alter column Stu_name varchar(10) not null;alter table Table2 add constraint uq_name unique (Stu_name);--性别(默认值为女)alter table Table2 add constraint de_sex default '女' for Stu_sex;--电话(3935开头,共8位数字)alter table Table2add constraint ck_phone check (Phone like '3935[0-9][0-9][0-9][0-9]');--班级编号(外键约束,table1(Class_id)alter table Table2add constraint fk_Class_id foreign key (Class_id) references Table1 (Class_id);

2、验证数据库约束

2.1 准备好1、中要求的两个数据表Table1,Tabel2。

2.2 验证主键(PRIMARY KEY)约束

试运行下面代码:

insert into Table1(class_id,class_name,director)

values('0101', '医学智能级班', 'J001')

请再一次insert into Table1(class_id,class_name,director) values('0101','医学智能级班', 'J001'), 请问能否顺利执行?如不能,出现什么问题?原因是什么?该如何解决?

再一次插入不能顺利执行。

报错:违反了 PRIMARY KEY 约束"pk_Classid",不能在”Table1“中插入重复键,重复键值为(0101)

解决方法:

/*1. 先把和有关table2的外键删除*/alter table Table2 drop constraint fk_Class_id;/*2. 然后删除Table1的主键约束*/alter table Table1 drop constraint pk_classid;

2.3 验证外键(FOREIGN)约束

1. 试运行下面两段代码:

-- 允许将显式值插入表的标识列中 ON-允许  OFF-不允许

--语法: SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }

set identity_insert table2 on

insert into Table2(stu_id,stu_name,stu_sex,birthdate,phone,class_id)

values('2018001', '张三', '男','2000-9-23','39357887','0101')

set identity_insert table2 off

set identity_insert table2 on

insert into Table2(stu_id,stu_name,stu_sex,birthdate,phone,class_id)

values('2018002', '李四', '男','2001-4-23','39357887','0102')

set identity_insert table2 off

请问:上述两段代码能否顺利执行?如不能,出现什么问题?原因是什么?该如何解决?

第二段代码不能顺利执行。

报错: INSERT 语句与 FOREIGN KEY 约束"fk_Class_id"冲突。该冲突发生于数据库"TEST",表"dbo.Table1", column 'Class_id'。

原因:Table1没有‘0102’这个班级,如果执行成功,意味着学生在一个不存在的班级里面,违反了参照的完整性。

  解决办法:加入已经存在的班级或在Table1中添加‘0102’班级的信息*/

2. 试运行下面代码:

delete from table1 where class_id='0101'

请问:上述代码能否顺利执行?如不能,出现什么问题?原因是什么?

不能顺利执行。

报错:DELETE 语句与 REFERENCE 约束"fk_Class_id"冲突。该冲突发生于数据库"TEST",表"dbo.Table2", column 'Class_id'。

如果删除成功,意味着没有‘0101’这个班级了,可是Table2中‘0101’班的学生无法处理,破坏了参照的完整性

因为默认违约处理是拒绝,如果Table1在创建外键约束的时候把外键的删除操作级联删除Table2中的学生信息就可以(on delete cascade)

备注:创建基本表时可指定on delete cascade,则为级联删除。那么,系统认为删除table1记录时,table2中相关的记录也会同时删除

如果不指定on delete cascade时默认为受限删除

2.4 验证唯一性(UNIQUE)约束

试运行下面代码:

set identity_insert table2 on

insert into Table2(stu_id,stu_name,stu_sex,birthdate,phone,class_id)

values('2018003', '张三', '男','2000-9-23','39357887','0101')

set identity_insert table2 off

请问:上述代码能否顺利执行?如不能,出现什么问题?原因是什么?

不能顺利执行。

报错:违反了 UNIQUE KEY 约束“uq_name”。不能在对象“dbo.Table2”中插入重复键。重复键值为 (张三)。

因为Table2表的Stu_name属性列有唯一约束,‘张三’与表中数据有冲突。

2.5 验证检查(CHECK)约束

试运行下面代码:

insert into Table2(stu_name,stu_sex,birthdate,phone,class_id)

values( '张历', '男','2000-9-23','79357887','0101')

请问:上述代码能否顺利执行?如不能,出现什么问题?原因是什么?

不能顺利执行。

报错:INSERT 语句与 CHECK 约束"ck_phone"冲突。该冲突发生于数据库"TEST",表"dbo.Table2", column 'Phone'

因为表Table2中的电话号码有check用户定义约束,phone是以‘3935’开头的8位电话号码,破坏了用户定义的完整性

、小结

1.什么是数据库的完整性?

数据库的完整性是指数据的正确性和相容性

数据的正确性是指数据是符合现实世界语义、反映当前实际状况的;

数据的相容性是指数据库同一对象在不同关系表中的数据是符合逻辑的。

2. 思考各类完整性约束对于数据库的数据检查有何作用? 

数据完整性约束指的是为了防止不符合规范的数据进入数据库在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。

3. 心得或总结

对表格进行增删改操作时要注意表格本身的约束以及各个表格之间的关系,比如向表格插入数据的时候需要考虑主键约束、唯一约束等;删除表格里的数据要注意表格与表格之间的关系。

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

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

相关文章

一. 信息安全.基础概念.概论

2016年《国家网络空间安全战略》、2017年6月1日实施《中华人民共和国网络安全法》、 网络空间安全已被增设为一级学科; CNCERT/CC---National Computer Network Emergency Response Technical Team/Coordination Center of China,工业和信息化部下属,国家计算机网…

EFCore_查询过滤器(默认条件)

设置过滤器 在实体类对应的配置文件中: builder.HasQueryFilter(e > e.Price > 0); 此后,所有查询命令均会默认添加过滤器 忽略过滤器 在构建查询命令时执行IgnoreQueryFilters()函数: var result dbContext.Books.IgnoreQueryFil…

探索PcapPlusPlus开源库:网络数据包处理与性能优化

文章目录 0. 本文概要1. PcapPlusPlus介绍1.1 概述1.2主要特性和功能1.3 PcapPlusPlus 主要模块关系和依赖1.4 网络协议层处理过程 2. 实例2.1 基于 PcapPlusPlus 的应用程序设计和封装流程:2.2 多线程示例代码2.3 代码说明: 3. 程序性能进一步优化3.1 避…

指哪打哪,重绘神器!我已出手…

最近AI界又爆出了一个大新闻,阿里巴巴、香港大学和蚂蚁集团的研究人员联合推出了一款超厉害的AI工具——MimicBrush,它的问世,无疑给图像编辑领域带来了一场革命,它就像魔法师手中的魔杖,轻轻一挥,就能让图…

隐私计算实训营第二期第七课:XGB算法与SGB算法开发实践

隐私计算实训营第二期-第七课 第七课:XGB算法与SGB算法开发实践1 决策树模型1.1 决策树的训练和预测过程1.2 决策树的发展过程 2 GBDT模型2.1 Boosting核心思想2.2 GBDT原理 3 XGB模型3.1 XGB核心思想3.2 XGB优点 3 隐语纵向树模型3.1 数据纵向分割3.2 隐私保护的树…

和小红书一起参会! 了解大模型与大数据融合的技术趋势

在过去的两年中,“大模型”无疑成为互联网行业的焦点话题,曾经炙手可热的大数据架构似乎淡出公众视野。然而,大数据领域并未停滞不前,反而快速演进,传统依赖众多开源组件的大数据平台正逐步过渡到以融合与简化为核心特…

SQL语句的案例分析

根据提供的图片内容,这段文字看起来像是一个SQL查询的一部分,特别是一个用于删除数据的语句。以下是对这段SQL的核心内容整理: ### 核心内容整理: 1. **删除操作**: - 使用DELETE语句来删除数据。 2. **子查询**…

Java 并发集合:CopyOnWrite 写时复制集合介绍

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 016 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…

如何查看xpf文件

xpf文件是什么 XPF文件是“XML Paper Specification File”的缩写,它是一种文件保存格式,具有以下特点和相关信息: 一、定义与用途 定义:XPF文件用于保留文档的固定布局,包括文本、图片以及其他文档元素的确切位置。…

mysql-sql-第十三周

学习目标: sql 学习内容: 37.查询各科成绩最高分、最低分和平均分: 以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率 及格为>60,中等为:70-80,优良为:80-90,优秀…

C#实现字符串模糊匹配

在C#中实现字符串的模糊匹配可以借助正则表达式或者一些模糊匹配算法来实现。 方法一:使用正则表达式 如果你的模糊匹配是基于简单的通配符(如*和?),可以通过正则表达式来实现。 using System; using System.Text.RegularExpr…

Vue组件间通信方式超详细(父传子、父传后代、子传父、后代传父、兄弟组件传值、没有关系的组件传值)

Vue组件间通信方式超详细(父传子、父传后代、子传父、后代传父、兄弟组件传值)_vue 父传子-CSDN博客 vue 组件间传值:父传子 / 子传父 / 子传子 / 祖传孙 - 简书

刚入行的测试新人,应该如何规划自己的职业发展路径?

作为一个刚入行的测试新人,应该如何规划自己的职业发展路径?如何规划自己的技术路线?软件测试的段位都有哪些?他们之间的薪资差异如何? 听说这些问题,是目前想要入行软件测试的同学们最关心的。那么我们今天…

2024 年江西省研究生数学建模竞赛A题:交通信号灯管理问题分析、数学模型及VISSIM仿真实现

2024 年江西省研究生数学建模竞赛题目交通信号灯管理 1 题目 交通信号灯是指挥车辆通行的重要标志,由红灯、绿灯、 黄灯组成。红灯停、绿灯行,而黄灯则起到警示作用。交通 信号灯分为机动车信号灯、非机动车信号灯、人行横道信号 灯、方向指示灯等。 一…

第2章.现场设备的物联网模式--数字孪生

2.2 数字孪生 DT是部署在现场的物联网设备的虚拟复制品。这个概念与创建物理实体或过程的模型(模拟)以了解其表现行为的过程非常相似。本书中使用的DT符号如下图所示: 图2.3——DT模式的符号 DT是物联网背景下的一种重要模式,因为…

【JavaScript脚本宇宙】打造完美用户体验:六大模态库全解析

从美观到高效:六大模态库实战指南 前言 随着现代Web开发的不断进步和用户体验要求的提升,模态窗口(Modal)已成为网页设计中不可或缺的一部分。模态窗提供了一种直观而有效的方式来展示重要信息、提示用户操作或承载交互内容。本…

【计算机网络】计算题(作业)

【一】 1、如下图所示网络。A在t0时刻开始向C发送一个2Mbits的文件;B在t0.1e秒(e为无限趋近于0的小正实数)向D发送一个1Mbits的文件。忽略传播延迟和结点处理延迟。 请回答下列问题:‏ (1)如果图中网络采…

检索增强生成RAG系列5--RAG提升之路由(routing)

在系列3和系列4我讲了关于一个基本流程下,RAG的提高准确率的关键点,那么接下来,我们再次讲解2个方面,这2个方面可能与RAG的准确率有关系,但是更多的它们是有其它用途。本期先来讲解RAG路由。 目录 1 基本思想2 Logica…

亲测解决argument --/--list: conflicting option string: --list

在设置一个变量的时候,需要输入一个list。按照教程设置后,如果设置了两个list变量,会出现这个错误。 环境 python3.12 + win11 解决方法 去掉"–list"即可。 Group.add_argument("--xiaohu", "--list", nargs="+",type=int, de…

等保测评应该选择什么样的SSL证书

选择适合等保测评的SSL证书,需考虑证书的加密强度、认证机制以及是否满足国家相关的密码技术要求 1、证书类型:应选择符合国家或行业标准的SSL证书,这些证书通常采用RSA、DSA或ECC等国际认可的加密算法。同时,考虑到国内特定的合规…