数据库(5)--触发器的定义

简介: 数据库(5)--触发器的定义

一、学习目标

熟悉触发器的定义和使用

二·、实验环境

Windows 11

Sql server2019


三、实验内容


学生(学号,年龄,性别,系名)


课程(课号,课名,学分,学时)


选课(学号,课号,成绩)


(1)建立学生表的insert触发器,若向学生表中插入一条记录,则自动向选课表中插入一行,令该生选一门选修人数最多的课。


(2)在建立学生表的delete触发器,若选课表中该生有选课记录,则拒绝删除,要求在删除学生信息同时,将相关表中的信息全部删除。


四、SQL代码

create trigger trigger_1
on stu
for insert
as
declare
@sno char(10),
@cnum char(10),
@sname char(10)
select @sno=(select sno from inserted)
select @sname=sname from inserted
select top 1 @cnum=cnum from(select cnum,count(*) as total from xe group by cnum)xe
insert into xe values(@sno,@cnum,0,@sname);
增加一行数据:
insert into stu (sno,sage,ssex,sdept,sname)
values(200511811,20,'男','计算机','张楚岚')

初始数据:

80f75e087b214fb791af2fffa7ea44b8.png



修改后的数据:


210d368ced9c4a62b9dac847e0d56473.png

create trigger de
on stu
after delete
as
declare @sno char(10)
set @sno=(select sno from deleted)
if @sno in (select sno from xe)
print'请先删除相关记录'
delete from xe where sno=(select sno from deleted)
delete from stu where  sno= (select sno from deleted)
print'删除完成'
删除语句:
delete from stu where sno=200511811
select *from stu
select * from xe

b6579fdca0004b84a5d820a3bb842ebf.png

五、小结


触发器(rigger)是用户定义在关系表上的一类由事件驱动的特殊过程。一旦定义,触发器将被保存在数据库服务器中。任何用户对表的增、删、改操作均由服务器自动激活相应的触发器,在关系数据库管理系统核心层进行集中的完整性控制。触发器类似于约束,但是比约束更加灵活,可以实施更为复杂的检查和操作,具有更精细和更强大的数据控制能力。


在同一个事务中的不同执行语句,如果后面语句中的操作触发了相应表的触发器,则在触发器内可以查看前面语句执行后的结果列表的内容,所以,在使用触发器的时候,对事物中多条语句的操作的顺序是要考虑清楚的。如果我们使用触发器+数据表的形式来对数据进行一些统计性的操作的时候,我们在保证触发器逻辑完整性的前提下,最好能通过数据库任务的方式来定时进行检查,但对于人为的数据库操作有时却是无能为力的,所以,为了避免这样的错误发生,有必要对统计结果做定期的校验,保证数据的正确性。

目录
相关文章
|
2月前
|
关系型数据库 MySQL 数据库
什么是数据库触发器?
【8月更文挑战第3天】
167 10
什么是数据库触发器?
|
2月前
|
存储 SQL 监控
ADBPG&Greenplum成本优化问题之ADB PG的数据库管控的定义如何解决
ADBPG&Greenplum成本优化问题之ADB PG的数据库管控的定义如何解决
33 2
|
2月前
|
存储 SQL 数据库
触发器的设计、掌握存储过程的基本概念和创建、执行、删除方法。掌握数据库备份的方法和数据库恢复的方法。
这篇文章介绍了数据库中触发器的设计概念,包括创建、修改、删除触发器的方法,并通过实验内容教授如何使用SQL命令创建DML触发器以及如何利用触发器实现数据的完整性和自动化处理。
触发器的设计、掌握存储过程的基本概念和创建、执行、删除方法。掌握数据库备份的方法和数据库恢复的方法。
|
2月前
|
SQL 数据处理 数据库
|
2月前
|
Cloud Native 关系型数据库 分布式数据库
云原生数据库2.0问题之DBStack的定义如何解决
云原生数据库2.0问题之DBStack的定义如何解决
|
3月前
|
数据采集 分布式计算 大数据
MaxCompute产品使用合集之数据集成中进行数据抽取时,是否可以定义使用和源数据库一样的字符集进行抽取
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
3月前
|
存储 JSON 数据库
项目管理定义问题之什么是序列化大对象的值对象数据库形态
项目管理定义问题之什么是序列化大对象的值对象数据库形态
|
4月前
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)
|
4月前
|
存储 安全 关系型数据库
|
4月前
|
SQL 分布式计算 MaxCompute
MaxCompute操作报错合集之通过UDF(用户定义函数)请求外部数据库资源并遇到报错,是什么原因
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
167 0
下一篇
无影云桌面