SQL触发器实例(上)
--1.) 创建测试用的表(testTable)
if exists (select * from sysobjects where name='testTable')
drop table testTable
GO
Create Table testTable
(
testField varchar(50)
) select * from testTable --2.) 创建基于表(testTable)的触发器(testTrigger)
IF EXISTS (Select name FROM sysobjects Where name = 'testTrigger' AND type = 'TR')
Drop TRIGGER testTrigger
GO
Create Trigger testTrigger
ON testTable
for Insert,Delete,Update
AS
if exists(select * from inserted)
if exists(select * from deleted)
print '...更新'
else
print '...插入'
else
if exists(select * from deleted)
print '...删除'
Go --.) 操作testTable表,测试触发器testTrigger
--分别执行Insert Into语句,Update语句,Delete语句,看看效果
Insert Into testTable values ('testContent!') Update testTable Set testField = 'UpdateContent' Delete From testTable select * from testTable --用到的功能有:
--1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);
--2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录,等等。 --这时候可以用到触发器。对于需求1,创建一个Update触发器: Create Trigger truStudent On student --在Student表中创建触发器
instead of Update --为什么事件触发
As --事件触发后所要做的事情
if Update(stuID)
begin Update borrow
Set stuID=i.stuID
From borrow as br , Deleted as d ,Inserted as i --Deleted和Inserted临时表
Where br.stuID=d.stuID end drop trigger truStudent
UPDATE student set stuID='' WHERE stuID='' Create trigger trdStudent
On Student
instead of Delete
As
Delete Borrow
From Borrow as br , Deleted as d Where br.StuID=d.stuID drop trigger trdStudent
delete FROM student WHERE stuID='' disable trigger trdStudent on Student select * from book
select * from borrow
select * from student --创建触发器(对删除表的约束)
create trigger droptabel
on database
for drop_table
as
print'删除表吗?'
print'不能删除表'
rollback transaction
go drop table students
disable trigger droptabel on database --关闭触发器
enable trigger droptabel on database CREATE TABLE students --学生信息表
(
stuID CHAR(10) primary key, --学生编号
stuName CHAR(10) NOT NULL , --学生名称
major CHAR(50) NOT NULL --专业
)
GO CREATE TABLE borrowS --借书表
(
borrowID CHAR(10) primary key, --借书编号
stuID CHAR(10) NOT NULL, --学生编号
BID CHAR(10) NOT NULL,--图书编号
T_time datetime NOT NULL, --借出日期
B_time datetime --归还日期
)
GO SElect * from students
select * from borrows Create Trigger truStudents On students --在Student表中创建触发器
for Update --为什么事件触发
As --事件触发后所要做的事情
if Update(stuID)
begin Update borrows
Set stuID=i.stuID
From borrows as br , Deleted as d ,Inserted as i --Deleted和Inserted临时表
Where br.stuID=d.stuID end UPDATE studentS set stuID='' WHERE stuID='' Create trigger trStudent
On Students
for Delete
As
Delete borrows
From borrows AS br , Deleted AS d
Where br.stuID=d.stuID drop trigger trStudent delete from students where stuID=''
SQL触发器实例(上)的更多相关文章
- SQL触发器实例讲解
SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Inser ...
- SQL触发器实例
SQL触发器实例讲解(本文是来自百度文库) 备注:本人建了一个站特价汇,我想记录每个商品的点击量,然后按照点击量来牌名商品,想要提高效率,所以必须得用触发器,下面是本人在百度文库中的找到的学习资料,分 ...
- SQL触发器实例(下)
基本语法: Create Trigger [TriggerName] ON [TableName] FOR [Insert][,Delete][,Update] AS --触发器要执行的操作语句. G ...
- sqlserver 触发器实例代码
定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update ...
- 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs
原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...
- [SQL SERVER系列]存储过程,游标和触发器实例[原创]
自己写的存储过程与游标结合使用的实例,与大家分享,也供自己查阅,仅供参考: --使用游标循环处理,删除重复的记录 declare @UserID int ) ) declare @UnitFlag i ...
- PL/SQL之存储过程和触发器实例
1.Oracle存储过程实例 /*不带任何参数存储过程(输出系统日期)*/ CREATE OR REPLACE PROCEDURE output_date IS BEGIN DBMS_OUTPUT.P ...
- SQL触发器、事物
触发器: 触发器为特殊类型的存储过程,可在执行语言事件时自动生效.SQL Server 包括三种常规类型的触发器:DML 触发器.DDL 触发器和登录触发器. 当服务器或数据库中发生数据定义语言 (D ...
- SQL触发器、事务
触发器: 触发器为特殊类型的存储过程,可在执行语言事件时自动生效.SQL Server 包括三种常规类型的触发器:DML 触发器.DDL 触发器和登录触发器. 当服务器或数据库中发生数据定义语言 (D ...
随机推荐
- redhat6.4 elasticsearch1.7.3安装配置
利用elasticsearch管理集群索引, 今天刚好需要重新调整elasticsearch的最大内存, 所以自己安装了练手 附件: elasticsearch 附件:elasticsearch-he ...
- 配置redis, make的时候: zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
今天正在centos7.3里面配置redis3.0, 结果make的时候抛出编译中断 CC adlist.o In file included from adlist.c:34:0: zmalloc. ...
- AMS1117稳压模块
AMS1117有降压稳压的作用.我们使用的是AMS1117-5,输出5V电压. 理论参数: 输出条件 最小值 理论值 最大值 理论电路图: 引脚图:
- 【分词器及自定义】Elasticsearch中文分词器及自定义分词器
中文分词器 在lunix下执行下列命令,可以看到本来应该按照中文”北京大学”来查询结果es将其分拆为”北”,”京”,”大”,”学”四个汉字,这显然不符合我的预期.这是因为Es默认的是英文分词器我需要为 ...
- BZOJ1297: [SCOI2009]迷路 矩阵快速幂
Description windy在有向图中迷路了. 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1. 现在给出该有向图,你能告诉windy总共有多少种不同 ...
- [JVM] - 继10进制的java.lang.Object查看之后
cmd清除命令:cls 之后查阅了其它博客,发现这位大神同样也在做JVM,并且我很希望用它的10进制转16进制类来测试一下该解析的10进制是否对应着Object的16进制呢? 这位大神的10进制转16 ...
- 解决方案:c调用python,PyImport_Import或者PyImport_ImportModule总是返回为空
下面c_python_utils.h是处理工具函数,test.cpp是测试程序,hello.py是python类 可是当我集成到项目中的时候,PyImport_Import总是返回为空,起初我以为是i ...
- C# String.Join 与 StringBuilder 对比,谁更快
String.Join 文档 StringBuilder 文档 这两天刷 Leedcode 做到一道 String 的题时突然想到这俩对比的问题,于是查了一下资料并简单对比了一下. 首先对于 ...
- Nginx 随笔
使用包管理工具安装nginx Linux(基于deb) sudo apt-get install nginx Linux(基于rpm) sudo yum install nginx FreeBSD s ...
- 深蓝色 --ppt
Deep Learning of Binary Hash Codes for Fast Image Retrieval [Paper] [Code-Caffe] 1. 摘要 针对图像检索问题,提出简单 ...