【sql】使用触发器
今天在写sql触发器时遇到这样一个问题:
利用完整性规则创建教师表,包括(教师工号,姓名,性别,职称,工资),在此基础上定义触发器,为教师表Teacher定义完整性规则“教授的工资不能低于4000元,如果低于4000元,自动改为4000元”。
教师表:
create table teacher(
tno char(9) primary key,
tname varchar(15),
tsex char(2),
job varchar(20),
tmoney int
)
错误代码:

在触发器中不能写形如inserted.xx的格式,正确写法是用select选出要使用的变量。可以插入多条语句,但是插入的时候是一条一条插的,所以执行时刻inserted表内应该只有一条语句。
正确写法:
create trigger tri2 on teacher
instead of insert
as
if ((select tmoney from inserted) < 4000 and (select job from inserted) = '教授')
insert into teacher values((select tno from inserted), (select tname from inserted), (select tsex from inserted), '教授', 4000)
else
insert into teacher select * from inserted
也可以用变量:
create trigger tri
on teacher
after insert,update
as
begin
declare @salary int, @jobb varchar(10)
set @salary=(select tmoney from inserted)
set @jobb = (select job from inserted)
if(@salary<4000 and @jobb='教授')
update teacher set tmoney=4000 where tno=(select tno from inserted)
end
还可以索性这样写:
create trigger tri3 on teacher
for insert, update
as
update teacher
set tmoney = 4000
where job = '教授' and tmoney < 4000
定义触发器,当对表SC的Grade属性进行修改时,则将此次操作记录到另一个表SC_U(Sno、Cno、Oldgrade、Newgrade)中,其中Oldgrade是修改前的分数,Newgrade 是修改后的分数。
create trigger tri
on sc
after update
as
if update(grade)
begin
create table sc_u(
sno char(9),
cno char(1),
oldgrade int,
newgrade int
)
insert into sc_u(sno, cno, oldgrade, newgrade)values
((select sno from deleted), (select cno from deleted), (select grade from deleted), (select grade from inserted))
end
参考博客:
instead of 和 after触发器的区别:
https://bbs.csdn.net/topics/300074591
【sql】使用触发器的更多相关文章
- Oracle数据库编程:使用PL/SQL编写触发器
8.使用PL/SQL编写触发器: 触发器存放在数据缓冲区中. 触发器加序列能够实现自动增长. 在触发器中不能使用connit和rollback. DML触发器 ...
- sql server触发器的例子
发布:thebaby 来源:脚本学堂 [大 中 小] 本文介绍下,在sql server数据库中使用触发器的简单例子,有需要的朋友可以参考下,希望对你有一定的帮助. 原文地址:http:/ ...
- 15、SQL Server 触发器
SQL Server 触发器 触发器是一种特殊的存储过程,只有当试图用数据操作语言DML来修改数据时才会触发,DML包含对视图和表的增.删.改. 触发器分为DML触发器和DDL触发器,其中DML触发器 ...
- (转)SQL Server 触发器
SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 ...
- 自己写的sql server触发器练练--高手请您跳过吧
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo ALTER TRIGGER [insertReplyToic] ON [dbo].[bbsReplyTopic] ...
- sql update 触发器 可获得被update的行的信息
类型:转载 sql update 触发器 可获得被update的行的信息,需要的朋友可以参考下. 复制代码 代码如下: create trigger TgName on tb for update ...
- (2.13)Mysql之SQL基础——触发器
(2.13)Mysql之SQL基础——触发器 关键词:Mysql触发器 1.一般形式 -- 0.查看触发器[1]SHOW TRIGGERS;[2]SELECT * FROM `information_ ...
- sql server 触发器详细应用
SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发 ...
- SQL server触发器中 update insert delete 分别给写个例子被。
SQL server触发器中 update insert delete 分别给写个例子以及解释下例子的作用和意思被, 万分感谢!!!! 主要想知道下各个语句的书写规范. INSERT: 表1 (ID, ...
- 在Sql Server触发器中判断操作是Insert还是Update还是Delete
在Sql Server触发器中判断操作是Insert还是Update还是Delete DECLARE @IsInsert bit, @IsUpdate bit, @IsDelete ...
随机推荐
- 中线,基线,垂直居中vertical-align:middle的一些理解
基线:小写字母xxxxx的下边缘线就是我们的css基线:一般的行内元素都是vertical-align: baseline;默认设置: x-height:就是指小写字母xxxx的高度,下边缘线到上边缘 ...
- XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem J. Terminal
题目:Problem J. TerminalInput file: standard inputOutput file: standard inputTime limit: 2 secondsMemo ...
- ISAP模板
#include<bits/stdc++.h> using namespace std; using namespace std; typedef long long ll; const ...
- TOSCA自动化测试工具--TestSuite Components
TestSuite Components 分了6块
- Druid学习之路 (三)Druid的数据源和段
作者:Syn良子 出处:https://www.cnblogs.com/cssdongl/p/9703204.html 转载请注明出处 Druid的数据源和分段 Druid的数据存储在"Da ...
- Heartbeats
很少有人否定,这是一首天籁.凄美动听的声音,触动的,是真正的灵魂深处.所谓“仁者见仁智者见智”,但有些东西是共通的,比如,我们的内心会被同一样东西触动.在这首动听的歌曲中,体现出那男女之间平凡又伟大的 ...
- 20145230熊佳炜《网络对抗》实验九:web安全基础实践
20145230熊佳炜<网络对抗>实验九:web安全基础实践 webgoat webgoat的中文是代罪羔羊的意思,而它是一个有很多漏洞的web应用程序,我们可以利用它来研究关于web应用 ...
- chrome中,BackstopJS 使用cookie文件后依旧提示需要登录
1. 本地环境: apache-tomcat:7.05,jdk8, backstopJS:latest-version 配置tomcat管理用户成功:手工访问tomcat应用内部服务正常: 2. 问 ...
- Linux crontab命令 定时任务 用法详解以及no crontab for root解决办法
最近系统服务器进行搬迁,又恰好需要使用定时任务运行程序,而我的程序主要使用PHP写的,然后总结了下定时任务的用法,但是在这里主要写的是关于crontab命令的用法,使用过程中遇到不少问题,例如no c ...
- mybatis映射文件select_resultMap_关联查询_collection定义关联集合
知识点:查询一个实体类,并查出这个类下面的集合 Employee.java实体类 package com.hand.mybatis.bean;public class Employee { pr ...