博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【SQL 触发器】
阅读量:6803 次
发布时间:2019-06-26

本文共 3033 字,大约阅读时间需要 10 分钟。

一.MySQL上触发器的使用

 

示例:

1 CREATE TRIGGER trigger_name2 trigger_time3 trigger_event ON tbl_name4 FOR EACH ROW5 trigger_stmt
View Code

trigger_name:标识触发器名称,用户自行指定;

trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;
trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE;
tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。

由此可见,可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。

另外有一个限制是不能同时在一个表上建立2个相同类型的触发器,因此在一个表上最多建立6个触发器。

trigger_event 详解

MySQL 除了对 INSERT、UPDATE、DELETE 基本操作进行定义外,还定义了 LOAD DATA 和 REPLACE 语句,这两种语句也能引起上述6中类型的触发器的触发。

LOAD DATA 语句用于将一个文件装入到一个数据表中,相当与一系列的 INSERT 操作。

REPLACE 语句一般来说和 INSERT 语句很像,只是在表中有 primary key 或 unique 索引时,如果插入的数据和原来 primary key 或 unique 索引一致时,会先删除原来的数据,然后增加一条新数据,也就是说,一条 REPLACE 语句有时候等价于一条。

INSERT 语句,有时候等价于一条 DELETE 语句加上一条 INSERT 语句。

INSERT 型触发器:插入某一行时激活触发器,可能通过 INSERT、LOAD DATA、REPLACE 语句触发;

UPDATE 型触发器:更改某一行时激活触发器,可能通过 UPDATE 语句触发;
DELETE 型触发器:删除某一行时激活触发器,可能通过 DELETE、REPLACE 语句触发。

 

实际使用:

1 /* 2 触发器-- 在给firsttable插入一条数据的同时 给secondtable插入相同的数据 3 */ 4 CREATE TRIGGER cfq_insert_one  5 AFTER   6 INSERT  7 ON firsttable FOR EACH ROW  8 INSERT INTO secondtable SET firstname =  new.firstName;/*new.firstName  就是新增加的数据*/ 9 /*展示  目标表上的触发器*/10 SHOW TRIGGERS LIKE 'firsttable';11     12 INSERT INTO firsttable VALUES ('李思');
View Code

 

如果,如果你打算执行多个语句,可使用BEGIN ... END复合语句结构。

示例如下:

1 CREATE TRIGGER testref BEFORE INSERT ON test12   FOR EACH ROW BEGIN3     INSERT INTO test2 SET a2 = NEW.a1;4     DELETE FROM test3 WHERE a3 = NEW.a1;  5     UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;6   END
View Code

 

 

 

 

二.SQL Server上的触发器 简单使用

首先了解一下 SQL Server中的 触发器的基本语法:

1.创建触发器

1 create trigger trigger_name 2  3   on {table_name | view_name} 4  5   {
for | After | Instead of } 6 7   [ insert, update,delete ] 8 9   as10 11   sql_statement
View Code

2.删除触发器

1 drop trigger trigger_name
View Code

3.查看已有的触发器

1 SELECT * FROM Sysobjects WHERE xtype = 'TR'
View Code

4.查看单个触发器

1 exec sp_helptext '触发器名'
View Code

 

 

 

接下来  展示一下简单使用的例子:

1.创建两个数据表用来 测试

1 CREATE TABLE [dbo].[tableA](2     [name] [nchar](10) NULL,3     [age] [int] NULL4 ) ON [PRIMARY]
View Code
1 CREATE TABLE [dbo].[tableB](2     [id] [int] NULL,3     [age] [int] NULL4 ) ON [PRIMARY]5 6 GO
View Code

查看某个数据表的 创建语句 可以试用一下的方法:

 

2.创建触发器 --> 测试触发器   -->   删除触发器 -->   展示触发器

1 /*创建 触发器--在tableA上创建insert触发器*/ 2 create trigger after_insert_tableA  3 on tableA 4 for insert 5 as 6     declare @oldId int,@newage int        /*定义自定义的变量*/ 7     select @oldId = Max(id) from tableB    /*为自定义的变量 赋值*/ 8     select @newage = age from inserted    /*inserted表是  触发器里的临时表之一*/ 9     10     if(@oldId is null)11 begin 12     insert into tableB values ( 1,@newage);    13 end14 else15     insert into tableB values ( @oldId+1,@newage);    16     17 18 insert into tableA values('马六',16);19 select * from tableA;20 select * from tableB;21 22 /*查看单个触发器*/23 exec sp_helptext 'after_insert_tableA'24 25 /*删除 触发器*/26 drop trigger after_insert_tableA;27 /*查看已有的触发器*/28 SELECT * FROM Sysobjects WHERE xtype = 'TR'
View Code

 

转载地址:http://apuwl.baihongyu.com/

你可能感兴趣的文章
mahout 实现canopy
查看>>
修炼你自己
查看>>
窥探一句话木马后门的背后
查看>>
Kafka设计解析(二):Kafka High Availability (上)-转
查看>>
bzoj2186【SDOI2008】沙拉公主的困惑
查看>>
Lambda 表达式的演示样例-来源(MSDN)
查看>>
什么场景应该用 MongoDB ?
查看>>
python学习:猜数字游戏
查看>>
Linux 进程、线程运行在指定CPU核上
查看>>
iOS11开发教程(二十三)iOS11应用视图实现按钮的响应(3)
查看>>
微软自然语言理解平台LUIS:从零开始,帮你开发智能音箱
查看>>
Centos创建用户
查看>>
视频列表
查看>>
python2 和 python3 区别
查看>>
cd4与cd8比值的意义
查看>>
【配置】log4j.properties 详解与配置步骤
查看>>
js页面载入特效如何实现
查看>>
C#委托和事件
查看>>
TPrinter控制票據打印機
查看>>
Pidgin 插件法解决Ubuntu11.10 QQ
查看>>