数据库触发器简介与实例
来源:互联网 发布:网络运营商区别 编辑:程序博客网 时间:2024/06/02 00:00
触发器
其是一种特殊的存储过程。一般的存储过程是通过存储过程名直接调用,而触发器主要是
通过事件(增、删、改)进行触发而被执行的。其在表中数据发生变化时自动强制执行。
常见的触发器有两种:after(for)、instead of,用于insert、update、delete事件。
after(for) 表示执行代码后,执行触发器
instead of 表示执行代码前,用已经写好的触发器代替你的操作
触发器语法:
create trigger 触发器的名字 on 操作表
for|after instead of
update|insert|delete
as
SQL语句
触发器实现原理图
触发器示例
Example1
--禁止用户插入数据(实际上是先插入,然后立刻将其删除!)
create trigger tr_insert on bank
for --for表示执行之后的操作
insert --即先执行了插入操作,同时在临时表中保存了插入记录
as
--执行完插入之后,在新生成的表中将刚刚插入的那条记录删除,
--而此时得到的刚刚插入的记录的id是通过临时表 inserted得到的
delete * from bank where cid=(select cid from inserted)
生成上面的触发器后,当用户再输入insert语句后就见不到效果了!
如:insert into bank values("0004',10000),是插入不进数据库的。
Example2
--删除谁就让谁的账户加上10元
create trigger tr_dalete on bank
instead of
delete
as
update bank balance=balance+10 where cid=(select cid from deleted)
生成这个触发器之后,当用户输入delete语句后,对应的那个id不但没有被删除掉,而且他的账户增加了10元
如:delete from bank where cid='0002',执行完这句话后,编号为0002的账户会增加10元
/*
Navicat SQL Server Data Transfer
Source Server : localSQL
Source Server Version : 100000
Source Host : localhost\SQLEXPRESS:1433
Source Database : UserInfo1
Source Schema : dbo
Target Server Type : SQL Server
Target Server Version : 100000
File Encoding : 65001
Date: 2016-03-02 08:42:06
*/
-- ----------------------------
-- Table structure for [dbo].[bank]
-- ----------------------------
DROP TABLE [dbo].[bank]
GO
CREATE TABLE [dbo].[bank] (
[cid] varchar(10) NOT NULL ,
[balance] int NOT NULL
)
GO
-- ----------------------------
-- Records of bank
-- ----------------------------
INSERT INTO [dbo].[bank] ([cid], [balance]) VALUES (N'100', N'100');
GO
INSERT INTO [dbo].[bank] ([cid], [balance]) VALUES (N'110', N'120');
GO
INSERT INTO [dbo].[bank] ([cid], [balance]) VALUES (N'200', N'200');
GO
INSERT INTO [dbo].[bank] ([cid], [balance]) VALUES (N'300', N'300');
GO
INSERT INTO [dbo].[bank] ([cid], [balance]) VALUES (N'400', N'410');
GO
INSERT INTO [dbo].[bank] ([cid], [balance]) VALUES (N'500', N'510');
GO
-- ----------------------------
-- Indexes structure for table bank
-- ----------------------------
-- ----------------------------
-- Primary Key structure for table [dbo].[bank]
-- ----------------------------
ALTER TABLE [dbo].[bank] ADD PRIMARY KEY ([cid])
GO
-- ----------------------------
-- Triggers structure for table [dbo].[bank]
-- ----------------------------
DROP TRIGGER [dbo].[tr_insert]
GO
CREATE TRIGGER [dbo].[tr_insert]
ON [dbo].[bank]
AFTER INSERT
AS
BEGIN
--delete * from bank where cid=(select cid from inserted)
update bank set balance=balance+10 where cid=(select cid from inserted)
END
GO
- 数据库触发器简介与实例
- 数据库触发器简介与实例
- 【触发器】数据库_触发器实例
- 数据库实例与进程简介
- 数据库事务简介与实例
- 数据库触发器实例讲解
- 数据库触发器实例讲解
- 触发器技巧与实例
- 数据库存储过程简介与实例
- 触发器简介&触发器与存储过程区别
- oracle数据库删除触发器实例
- 触发器设计技巧与实例
- 触发器设计技巧与实例
- 触发器设计技巧与实例
- 触发器设计技巧与实例
- 触发器设计技巧与实例
- 触发器设计技巧与实例
- 数据库基本操作与触发器
- 递归 2016.3.8
- linux PHP+APACHE手动环境搭建
- HTML5日期输入类型(date)
- OSI七层模型
- viewpager+handler无限轮播
- 数据库触发器简介与实例
- Ubuntu相关问题
- 内存泄漏详解(2)
- 面向对象——意图与逻辑 (二)
- C++中的explicit关键字
- 关于制作渐变的UIScollView渐变以及scrollView的约束问题
- 【杭电】[2048]神、上帝以及老天爷
- Scrapy
- ffmpeg解码流程