SQL语句(二十一)—— 触发器(DML触发器)
触发器
一 、触发器概述(特殊的存储过程)
定义:
在修改指定表值的数据时执行的 存储过程. 不同的是 : 执行存储过程要使用EXEC语句来调用,而触发器的执行不需要使用EXEC语句来调用.
作用:
实现由主键和外键所不能保证的复制的参照完整性和数据的一致性
他能够对数据库中的相关表进行级联修改
提供比 CHECK约束 更复杂的数据完整性,并自定义错误信息。
分类:
数据操作语言触发器 DML
数据库操作语言 : update,Delete
数据定义语言触发器 DDL
记录数据库更改事件
二、创建DML触发器
INSERT 触发器
DELETE 触发器
UPDATE 触发器
替代触发器
允许使用嵌套触发器
递归触发器
5.25: 在Employee表上创建一个名为Employee_deleted的触发器,其功能: 当对表进行删除时,首先检查员工是否为 '人事部'员工,如果不是可以删除,否则撤销删除并显示'无法删除'
Create trigger employee_delete
on Department
After Delete
AS
Begin
Declary @x char()
Select @x = DepartmentName --变量来自数据库,用from
From Department if (@x = '人事部') --没有就用变量
Begin
print '无法删除'
RollBack --撤销都是RollBack
End
End --执行
Delete From Department Where Sname = '人事部'
先删除,再撤销
Create trigger employee_delete
on Employee
After Delete
AS
Begin
Declare @Dp varchar()
Select @Dp = DepartmentName
From Department D1, Deleted D2
Where D1.DepartmentID = D2.DepartmentID
If(@Dp = '人事部')
Begin
print '无法删除'
RollBack
End
End
更新触发器(返回更新的记录)
Create trigger employee_update
on Stu_info
After Update
AS
Begin
Declare @StuCount Int
Select @StuCount = Count(*)
From stu_info Update Stu_sum
Set number = @StuCount Select S_id As 更新前学生编号, S_name As 更新前学生姓名
From Deleted Select S_id As 更新后学生编号, S_name As 更新后学生姓名
From Inserted
End --执行
Update Stu_info
Set S_name = '张三'
Where S_id =
Instead of (替代触发器)先判断,再操作
Create trigger employee_delete
on Employee
Instead of Delete
AS
Begin
Declare @Dp varchar()
Select @Dp = DepartmentName
From Department
If(@Dp = '人事部')
Begin
print '无法删除'
End
End
禁止直接向表插入记录 操作
Create Trigger Insert_Forbidden
On Stu_Sum
After Insert
AS
Begin
Raiserror('不允许直接向该表插入记录, 操作被禁止', , )
RollBack Transaction
End
触发器嵌套
服务器 - > 属性 -> 杂项 -> 允许触发器激发其他触发器 -> true
递归触发器
数据库 -> 属性 -> 选项 -> 杂项 -> 递归触发器已启用 -> true
SQL语句(二十一)—— 触发器(DML触发器)的更多相关文章
- SQL Server 用SQL语句查找某个表的触发器
select * from sysobjects where xtype='TR' and parent_obj=object_id('表名') 再用sp_helptext ...
- Oracle常用sql语句(二)之组函数、多表查询
DML(数据操纵语言) INSERT .UPDATE. DELETE 插入操作:INSERT: 语法: INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...); 注 ...
- 数据库 数据库SQL语句二
单行函数 --操作数据对象 --接受参数返回一个结果 --只对一行进行变换 --每行返回一个结果 --可以转换数据类型 --可以嵌套 --参数可以是一列或一个值 字符函数 SQL> select ...
- SQL语句(十一)函数查询
(十一)函数查询 1. 聚合函数 对一组值进行计算,得到一个返回值 SUM(), 求和 AVG(), 求平均 MIN(), 求最小 MAX(), 求最大 COUNT(), 计数,即个数 --例1 求所 ...
- 开发中常用的sql语句二
sql 数字全角半角转换 create FUNCTION dbo.ConvertWordAngle ( ), --要转换的字符串 @flag bit --转换标志,0转换成半角,1转换成全角 )) A ...
- mysql 常用sql语句 二
mysql 查询 基本查询 select * from users; 去重 select distinct(name),high from users order by high desc; ## 注 ...
- SQL 语句 (二) --- SELECT
1 完整句法: SELECT [ ALL | DISTINCT TOP n [] WITH TIES select_list [INTO [new_table_name] ] [FROM {table ...
- SQL Server 数据库DML触发器 【一】
今天学习SQL Server数据库中DML触发器(DDL触发器以后有时间继续学习). 当删除一条创建有触发器的表中的内容时,触发器执行SQL语句. 1.首相先创建一张表,表名称是 [Test] , 内 ...
- SQL Server编程(06)触发器
SQL Server 通过触发器用来保证业务逻辑和数据的完整性.在SQL Server中,触发器是一种特殊类型的存储过程,可在执行语言事件时自动触发.SQL Server中触发器包括三种:DML触发器 ...
随机推荐
- BNUOJ 52318 Be Friends prim+Trie
题目链接: https://acm.bnu.edu.cn/v3/problem_show.php?pid=52318 B. Be Friends Case Time Limit: 2500msMemo ...
- javascript 组件化(转载)
这边只是很简陋的实现了类的继承机制.如果对类的实现有兴趣可以参考我另一篇文章javascript oo实现 我们看下使用方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- PAT 甲级 1151 LCA in a Binary Tree
https://pintia.cn/problem-sets/994805342720868352/problems/1038430130011897856 The lowest common anc ...
- PAT 1072 开学寄语
https://pintia.cn/problem-sets/994805260223102976/problems/994805263964422144 1072 开学寄语(20 分)提问 下图是上 ...
- 获取php版本
phpversion()函数可以获取版本 version_compare可以比较两个版本 mixed version_compare ( string $version1 , string $vers ...
- Java如何查看死锁?
转载自 https://blog.csdn.net/u014039577/article/details/52351626 Java中当我们的开发涉及到多线程的时候,这个时候就很容易遇到死锁问题,刚开 ...
- isset与empty 的区别
isset()与empty()函数的区别,isset()只需要验证一个值是否存在: 而empty()不但需验证这个值是否存在,还需检验它的值是否非空和非0: 注:isset()只检验一个变量是否已经设 ...
- vue 引入组件
<comA></comA>此时可用在模板里 //a为vue文件,里面定义了模板import comA from './components/a' export default ...
- screen.height && screen.width
screen.height && screen.width how to get window max width in js screen.height; screen.width; ...
- 如何规范 CSS 的命名和书写
我开始学前端的时候也是对于规范问题头疼,后来看了网易的NEC规范,惊呼牛逼 NEC : 更好的CSS样式解决方案 只遵循横向顺序即可,先显示定位布局类属性,后盒模型等自身属性,最后是文本类及修饰类属性 ...