数据库||数据库的完整性

简介: 数据库||数据库的完整性

1.实验题目:数据库的完整性

2.实验目的和要求:

掌握数据库的实体完整性约束定义,完整性检查及违约处理方式。

掌握数据库的参照完整性约束定义,完整性检查及违约处理方式。

掌握数据库的用户定义完整性约束定义,完整性检查及违约处理方式。

掌握触发器的定义及使用。

3.实验步骤:

  1. 按实验内容要求完成各项操作
  2. 根据题目要求给出解决方案
  3. 提交实验报告

4.实验内容:

1.完整性约束的定义

1.1 定义S, C表,定义实体完整性约束,定义学生的年龄在19到22岁之间,课程名唯一的约束

--建表
Create table S
(Sno char(10),
Sname char(10),
Sex char(10),
Age smallint  check (age <22 and age > 19),
Dept char(10),
Primary key(Sno)
)
Create table C
( Cno char(10),
Cname char(10) unique,
Ccredit char(10),
Cpno char(10),
Primary key (Cno)
)
 
Insert 
  Into S
  Values('42101','赵君君','男',19,'CS'),
        ('42102','赵小花','女',22,'MA'),
    ('42103','赵小明','男',27,'MA'),
    ('42104','赵宇宇','男',18,'CS'),
    ('42105','赵兰兰','女',17,'IS');
Insert 
  Into C
  Values('1','CS','2',4),
        ('2','MA','3',2),
    ('3','IS','1',7);
 
select * from S;
select * from C;

1.2 在C表中增加cpno字段,cpno字段为先修课号,定义cpno为外码,参照C表的cno,并定义当删除被参照表中相关记录时,要求违约处理方式为拒绝。

Alter table C

Add constraint FK_CPNO

FOREIGN key(CPNO)

REFERENCES C(CNO)

ON delete NO action

ON update NO action;

1.3 定义SC表的实体集参照完整性约束,要求当其被参照表发生删除操作时,S表违约处理的方式为级联,当其被参照表发生修改操作时,违约处理的方式为拒绝。

Create table sc


(SNO char(30),


CNO char(6),


GRADE smallint,


PRIMARY key(SNO,CNO),


FOREIGN key(sno) REFERENCES s(sno)


ON delete cascade


ON update NO action,


FOREIGN key(cno) REFERENCES c(cno)


ON delete cascade


ON update NO action);


2.触发器


2.1 建立一DML触发器,每当学生的成绩发生更新时,检查更新的学号是否满足0-100分之间,如果不满足则不允许更新,如满足则将更新的学号,成绩存入g-log表内


create trigger upsc on sc


for update


as  


    if update(g)

  begin


    declare @gr smallint


    select @gr=inserted.g from   inserted


    if (@gr<0 or @gr>100)


begin


  print'成绩录入不合规范'


  rollback transaction


end


  else  


   insert into glog select inserted.sno,g from  inserted


end


2.2 建立一个INSTEAD OF触发器,一次只允许删除一条记录每当删除课程表中的记录超过一条时,则不允许删除,且给出提示信息“删除记录一次不可超过一条”


create trigger del_tri


on c


instead of delete


as


begin


declare @n smallint

Select  @n=count(*) from deleted

If @n>1

Print 删除记录一次不可超过一条

rollback

End

5.实验总结

本次实验主要为了了解数据库的实体完整性约束定义,完整性检查及违约处理方式。

练习数据库的参照完整性约束定义,完整性检查及违约处理方式和数据库的用户定义完整性约束定义,完整性检查及违约处理方式。并且在一定程度上学习掌握触发器的用法。

6.思考题

1.参照完整性约束的违约判定和处理规则是什么?

答:参照完整性的违约判定和处理规则:

图片.png

2.简述AFTER触发器和INSTEAD OF触发器的区别。


答:INSTEAD OF 触发器 用来代替通常的触发动作,即当对表进行INSERT、UPDATE 或 DELETE 操作时,系统不是直接对表执行这些操作,而是把操作内容交给触发器,让触发器检查所进行的操作是否正确。


AFTER 触发器 定义了对表执行了 INSERT、UPDATE 或 DELETE 语句操作之后再执行的操作。AFTER 触发器只能在表上指定,且动作晚于约束处理。每一个表上只能创建一个 INSTEAD OF 触发器,但可以创建多个 AFTER 触发器。


相关文章
|
7月前
|
关系型数据库 数据库
关系型数据库的数据完整性
关系型数据库通过一系列机制和技术手段来确保数据的完整性,从而为用户提供准确、一致和可靠的数据服务。这些措施对于保障数据的质量、满足用户需求以及维护系统的稳定运行具有重要意义。
60 5
|
7月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
|
7月前
|
关系型数据库 数据库 数据安全/隐私保护
关系型数据库的数据完整性保障
【5月更文挑战第9天】关系型数据库的数据完整性保障
144 1
|
5月前
|
存储 SQL 关系型数据库
数据库事务:确保数据完整性的关键20
【7月更文挑战第20天】事务是数据库操作的基本逻辑单位,确保数据一致性。ACID原则包括:原子性(操作全成或全败),一致性(事务前后数据合法性),隔离性(并发操作互不影响),持久性(提交后更改永久保存)。MySQL的InnoDB引擎支持事务,通过undo log实现回滚,redo log确保数据持久化。开启事务可使用`BEGIN`或`START TRANSACTION`,提交`COMMIT`,回滚`ROLLBACK`。
178 70
|
7月前
|
存储 安全 算法
【软件设计师备考 专题 】数据库的控制功能(并发控制、恢复、安全性、完整性)
【软件设计师备考 专题 】数据库的控制功能(并发控制、恢复、安全性、完整性)
132 0
|
6月前
|
存储 数据管理 数据库
理解数据库中的参照完整性
【6月更文挑战第13天】数据库设计旨在创建和维护企业的数据管理系统,确保数据完整性和消除冲突。好的数据库设计应减少冗余,保证信息准确完整,并满足处理和报告需求。设计工具包括E-R图和UML等。
418 2
理解数据库中的参照完整性
|
5月前
|
存储 关系型数据库 MySQL
关系型数据库mysql验证数据完整性
【7月更文挑战第2天】
151 1
|
7月前
|
存储 关系型数据库 数据库
关系型数据库的数据一致性和完整性
【5月更文挑战第1天】关系型数据库的数据一致性和完整性是数据库设计中的两个重要概念,它们共同保证了数据库中数据的准确性和可靠性。
244 2
关系型数据库的数据一致性和完整性
|
6月前
|
存储 数据采集 NoSQL
DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
【6月更文挑战第4天】DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
144 1
|
7月前
|
数据库 数据库管理
理解数据库的ACID原则:确保数据完整性与一致性的基石
【5月更文挑战第20天】ACID原则是数据库事务处理的核心,包括原子性、一致性、隔离性和持久性。原子性保证事务操作全完成或全不完成,保持数据完整;一致性确保事务前后数据库保持一致性状态,不破坏完整性约束;隔离性防止并发事务相互影响,通过锁等技术实现;持久性则保证事务提交后的修改永久保存,即使系统故障也能恢复。这些原则确保了数据的可靠性和安全性。