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 ...
随机推荐
- Visual Studio 2012 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案(转载)
转载:http://www.th7.cn/Program/c/201303/127343.shtml 原因是Visual C++ 2012 使用了更加安全的 run-time library rout ...
- Python3基础 函数 递归 阶乘与斐波那契数列
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- JavaScript:正则表达式 问号
问号 1.?表示重复前面内容的0次或一次(但尽可能多重复) var reg=/abc?/g; var str="abcdabcaba"; console.log(str.match ...
- POJ 2373 Dividing the Path (单调队列优化DP)题解
思路: 设dp[i]为覆盖i所用的最小数量,那么dp[i] = min(dp[k] + 1),其中i - 2b <= k <= i -2a,所以可以手动开一个单调递增的队列,队首元素就是k ...
- console.time测试代码块执行时间
console.time('计时器'); for (var i = 0; i < 1000; i++) { for (var j = 0; j < 1000; j++) {} } cons ...
- ElasticSearch 5.4 安装
1. 前期准备 环境准备 IP地址 操作系统 内存 192.168.1.10 centos 7 16 192.168.1.11 centos 7 16 192.168.1.12 centos ...
- mui --- 怎么获取百度地图定位功能
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- shell 布尔运算
布尔运算 Bash 里的逻辑运算,与.或.非. 在 Shell 下如何进行逻辑运算 范例:true or false 单独测试 true 和 false,可以看出 true 是真值,false 为假 ...
- 如何上传本地文件到github又如何删除自己的github仓库
首先自己在https://github.com/网站要注册一个账户 自己上传工程到jithub,没有付费的用户只能选用public,意味着你的项目在全网是可以被看到和下载的: 所以涉及私密信息的,需要 ...
- linux 系统调用号表
位于 /usr/include/asm/unistd.h 由于我是64位系统,所以有一些额外的东西.我的这个文件为下文 #ifndef _ASM_X86_UNISTD_H #define _ASM_X ...