-
2021-06-11 14:20:48
1 AFTER触发器
[USE <数据库名>
GO]
CREATE TRIGGER <触发器名>
ON <表名> FOR <动作INSERT,UPDATE,DELETE>
AS
[触发触发器后的附加条件]
BEGIN
<动作集合>
END;**例:**创建一个删除学生成绩的触发器。
CREATE TRIGGER SCCJ
ON SC FOR DELETE
AS
PRINT’学生已经被删除’;2 INSTEAD OF触发器
[USE <数据库名>
GO]
CREATE TRIGGER <触发器名>
ON <表名> INSTEAD OF <动作INSERT,UPDATE,DELETE>
AS
BEGIN
<动作集合>
END;**例:**定义一个学生查询所有选课成绩的视图VIEW_SC,要求显示学号、学生姓名、课程名、学分、成绩。在该视图上创建一个插入数据的INSTEAD OF触发器,代替插入命令执行插入操作。
CREATE VIEW CJ(Sno,Sname,Cname,Ccredit,Grade)
AS
SELECT Student.Sno,Sname,Cname,Ccredit,Grade
FROM Student,Course,SC
WHERE Student.Sno=SC.Sno AND Course.Cno=SC.Cno;
CREATE TRIGGER INS
ON CJ INSTEAD OF <动作INSERT,UPDATE,DELETE>
AS
BEGIN
INSERT INTO CJ(Sno,Sname,Cname,Ccredit,Grade)
SELECT Student.Sno,Sname,Cname,Ccredit,Grade
FROM INSERTED.
END;更多相关内容 -
sqlserver 禁用触发器和启用触发器的语句
2020-12-15 06:50:49您可能感兴趣的文章:SQLServer2005触发器提示其他会话正在使用事务的上下文的解决方法SQL Server触发器及触发器中的事务学习SQL Server 触发器 表的特定字段更新时,触发Update触发器SQLServer触发器创建、删除、... -
触发器创建sql语句
2011-07-06 11:36:42前后触发器创建语句使用sql语句创建触发器 -
SQLserver中触发器常用语句
2020-06-26 14:56:36T-SQL语句 2删除触发器 drop trigger 触发器名称[,...] 3重命名触发器 用查询分析器重命名 exec sp_rename 原名称, 新名称 sp_rename 是 SQL Server 自带的一个存储过程,用于更改当前数据库中用户创建的对象...1创建触发器
create trigger 触发器名称 on 表名 for delete,update,insert --触发条件可多选或单选 as T-SQL语句
2删除触发器
drop trigger 触发器名称[,...]
3重命名触发器
用查询分析器重命名 exec sp_rename 原名称, 新名称 sp_rename 是 SQL Server 自带的一个存储过程,用于更改当前数据库中用户创建的对象的名称,如表名、列表、索引名等。 exec 是 EXECUTE 的缩写。功能是 执行一个存储过程.或者是 执行一个动态SQL。
4禁用、启用触发器
禁用:alter table 表名 disable trigger 触发器名称 启用:alter table 表名 enable trigger 触发器名称 如果有多个触发器,则各个触发器名称之间用英文逗号隔开。 如果把“触发器名称”换成“ALL”,则表示禁用或启用该表的全部触发器。
5instead of 触发条件
INSTEAD OF 执行触发器语句,但不执行触发触发器的 SQL 语句,比如试图删除一条记录时,将执行触发器指定的语句,此时不再执行 delete 语句。例如: create trigger f on table1 instead of delete as T-SQL语句
6查看数据库中所有触发器
use 数据库名 go select * from sysobjects where xtype='TR' sysobjects 保存着数据库的对象,其中 xtype 为 TR 的记录即为触发器对象。在 name 一列,我们可以看到触发器名称。
7查看某触发器内容
use 数据库名 go exec sp_helptext '触发器名称'
8查看触发器属性
use 数据库名 go exec sp_helptrigger tbl sp_helptrigger 有两个参数:第一个参数为表名;第二个为触发器类型,为 char(6) 类型,可以是 INSERT、UPDATE、DELETE,如果省略则显示指定表中所有类型触发器的属性。
9递归、嵌套
递归分两种,间接递归和直接递归。我们举例解释如下,假如有表1、表2名称分别为 T1、T2,在 T1、T2 上分别有触发器 G1、G2。 间接递归:对 T1 操作从而触发 G1,G1 对 T2 操作从而触发 G2,G2 对 T1 操作从而再次触发 G1... 直接递归:对 T1 操作从而触发 G1,G1 对 T1 操作从而再次触发 G1... 嵌套触发器 类似于间接递归,间接递归必然要形成一个环,而嵌套触发器不一定要形成一个环,它可以 T1->T2->T3...这样一直触发下去,最多允许嵌套 32 层。 设置直接递归 默认情况下是禁止直接递归的,要设置为允许有两种方法: T-SQL:exec sp_dboption 'dbName', 'recursive triggers', true EM:数据库上点右键->属性->选项。 设置间接递归、嵌套 默认情况下是允许间接递归、嵌套的,要设置为禁止有两种方法: T-SQL:exec sp_configure 'nested triggers', 0 --第二个参数为 1 则为允许 EM:注册上点右键->属性->服务器设置。
-
用sql脚本创建sqlserver数据库触发器范例语句
2020-09-11 05:36:53创建SqlServer数据库触发器脚本范例,方便大家用sql来创建触发器,学习sqlserver的朋友可以参考下。 -
SQL语句之触发器
2020-06-21 14:39:00SQL语句之触发器SQL语句之触发器IF NOT EXISTS和 IF EXISTS的区别介绍使用AFTER触发器与INSTEAD OF触发器的区别INSTEAD OF触发器AFTER触发器Inserted和Deleted在insert、update、detele的简单使用示例AFTER触发器...SQL语句之触发器
SQL语句之触发器
在学习触发器之前,我们先要明确几个概念:
IF NOT EXISTS和 IF EXISTS的区别
介绍
if not exists 即如果不存在,if exists 即如果存在
使用
a.判断数据库不存在时
if not exists(select * from sys.databases where name = 'database_name')
b.判断表不存在时
if not exists (select * from sysobjects where id = object_id('table_name') and OBJECTPROPERTY(id, 'IsUserTable') = 1)
c.判断列不存在
if not exists (select * from syscolumns where id=object_id('table_name') and name='column_name')
当判断的表不存时,我可以执行创建数据库,创建表,增加列,可以执行相应的SQL语句;
而if exists同理判断,首先判断查询结果是否存在,如果存在执行判断后面的语句, 查询的数据库,表,列的方法相同由此可见,“IF EXISTS“可以避免删除不存在的数据库出现的MySQL错误信息。另外需要注意的是:使用DROP DATABASE 或DROP SCHEMA 语句会删除指定的整个数据库,该数据库中的所有表(包含其中的数据)也将永远删除。因此使用时需谨慎,以免错误删除。1
AFTER触发器与INSTEAD OF触发器的区别
INSTEAD OF触发器
INSTEAD OF 触发器用来代替通常的触发动作,即当对表进行INSERT、UPDATE 或 DELETE 操作时,系统不是直接对表执行这些操作,而是把操作内容交给触发器,让触发器检查所进行的操作是否正确。如正确才进行相应的操作。因此,INSTEAD OF 触发器的动作要早于表的约束处理。
INSTEAD OF 触发器的操作有点类似于完整性约束。在对数据库的操纵时,有些情况下使用约束可以达到更好的效果,而如果采用触发器,则能定义比完整性约束更加复杂的约束。有关触发器与约束的比较,请参见联机丛书。
INSTEAD OF 触发器不仅可在表上定义,还可在带有一个或多个基表的视图上定义,但在作为级联引用完整性约束目标的表上限制应用。AFTER触发器
AFTER 触发器定义了对表执行了 INSERT、UPDATE 或 DELETE 语句操作之后再执行的操作。比如对某个表中的数据进行了更新操作后,要求立即对相关的表进行指定的操作,这时就可以采用 AFTER 触发器。AFTER 触发器只能在表上指定,且动作晚于约束处理。
每一个表上只能创建一个 INSTEAD OF 触发器,但可以创建多个 AFTER 触发器。2Inserted和Deleted在insert、update、detele的简单使用
Inserted和Deleted在insert、update、detele的简单使用
Inserted表和Deleted表,仅仅在触发器运行时存在。当insert、update、detele操作时,可使用借助两个表来输出(使用OUTPUT关键字)操作前后的数据的变化。3
ROLLBACK
rollback 回滚的意思。 就是数据库里做修改后(update ,insert , delete)未commit 之前 使用rollback 可以恢复数据到修改之前。
示例
AFTER触发器示例
限制sc表考试成绩必须在0~100范围内。
CREATE TRIGGER tri_1 ON sc AFTER INSERT,UPDATE AS IF EXISTS( SELECT * FROM INSERTED WHERE grade NOT BETWEEN 0 AND 100 ) BEGIN ROLLBACK PRINT '成绩必须在0-100范围内' END
限制student表学生所在系的取值必须在{计算机系,信息系,物理系,数学系}范围内。
CREATE TRIGGER tri_2 ON student AFTER INSERT,UPDATE AS IF EXISTS( SELECT * FROM INSERTED WHERE sdept NOT IN ('计算机系','信息系','物理系','数学系','数学系') ) BEGIN ROLLBACK PRINT '学生所在系的取值必须在{计算机系,信息系,物理系,数学系}范围内' END
限制学生的选课总门数不能超过8门。
CREATE TRIGGER tri_3 ON sc AFTER INSERT,UPDATE AS IF EXISTS ( SELECT * FROM student s INNER JOIN sc ON sc.sno = s.sno GROUP BY s.sno HAVING COUNT(sno) > 8 ) BEGIN ROLLBACK PRINT '学生的选课总门数不能超过8门。' END
INSTEAD OF触发器示例
限制不能删除考试成绩不合格学生的考试记录。
CREATE TRIGGER tri_4 ON sc INSTEAD OF DELETE AS IF EXISTS ( SELECT * FROM DELETED WHERE grade < 60 ) BEGIN ROLLBACK PRINT '不能删除考试成绩不合格学生的考试记录。' END
References
-
Oracle创建主键自增表(sql语句实现)及触发器应用
2020-12-15 21:05:331、创建表 代码如下: createtableTest_Increase( useridnumber(10)NOTNULLprimarykey,/*主键,自动增加*/ usernamevarchar2(20) ); 2、创建自动增长序列 代码如下: ... 3、创建触发器 代码如下: CREATETRIGGERTest_In -
sql语句---触发器
2019-03-18 21:32:43一、触发器定义 触发器是一种机制,当某个事物满足某个条件,触发某个功能 当某个事物满足某个条件触发某个功能 用法: 1、安全考虑,考虑到数据被修改的权限问题,用触发器代替用户来添加修改数据。 2、审计...一、触发器定义
触发器是一种机制,当某个事物满足某个条件,触发某个功能
当某个事物满足某个条件触发某个功能
用法:
1、安全考虑,考虑到数据被修改的权限问题,用触发器代替用户来添加修改数据。
2、审计功能,对前端操作进行审计
3、实现业务规则
4、同步数据
5、用于科学计算,做数学统计
二、触发器编写
1、编写格式
注意:DELIMITER 是定界符,分隔符的意思
声明mysql的结束符,默认结束符是;
DELIMITER || CREATE TRIGGER triggerName AFTER/BEFORE insert ON tableName FOR EACH ROW BEGIN ISNERT INTO tableName(column1,column2,...)VALUE(....); END DELIMITER ;
2.触发器效果的语句
Create 创建
Trigger 触发器
Tb2_auto_add 触发器名称,必须有意义
AFTER 触发时间
AFTER在触发事件之后
BEFOR 在触发器之前
INSERT 触发的条件
UPDATE 更新事件
DELETE 删除事件
INSERT 插入事件
EACH ROW 任意一行
BEGIN 开始编写触发事件
Insert into tb2(name,age) value(“老王”,18); 触发的事件
END 触发事件结束
3、举例分析
以两个表 ta1 和 ta2为例
1.创建table1,table2 表: create table table1(name char(30),age int)charset="utf8"; create table table2(name char(30),age int)charset="utf8"; 2.创建触发器: DELIMITER || create trigger tb2_auto_add after insert on table1 for each row begin insert into table2(name,age)value("老旧",33); end DELIMITER ; insert into table1(name,age)value("老刘",23);
测试结果:
三、查看触发器
触发器的信息都被存放在information_schema数据库当做trigger表当中
查看information_schema中所有信息
select * from information_schema.triggers\G;
四、删除触发器
DROP TRIGGER triggerName;
在触发器中,new 变量代表触发表,可以生成动态的
结果:
-
SQLserver中触发器创建常用语句
2020-06-26 23:20:50@@ROWCOUNT和@@ERROR变量的值,在执行完一条语句后总是会发生变化,所以我们将他们作为判断的依据的时候应该首先保存在局部变量中。他们反映的都是紧接着的上一条语句对他们的影响! 我们通常可以通过update、... -
sqlserver 创建触发器 远程服务器相应执行SQL语句
2016-10-18 12:04:42 -
SQL语法——触发器
2022-04-17 20:17:42在MySQL中,触发器是一组SQL语句,当对关联表上的数据进行更改时会自动调用这些语句。可以定义触发器在INSERT,UPDATE或DELETE语句更改数据之前或之后调用。在MySQL 5.7.2版之前,可以为每个表定义最多六个触发器。 ... -
SQL触发器 常用语句
2018-07-30 15:19:00T-SQL 语句 注意:触发器名称是不加引号的。 二、删除触发器 drop trigger 触发器名称 删除多个触发器:drop trigger 触发器名称,触发器名称 三、重命名触发器 用查询分析器重命名 exec sp_rename 原名称... -
Oracle触发器(附带SQL语句完整过程及示例)
2019-12-16 22:08:24触发器(trigger)设置某个条件,如果SQL语句执行了该条件则触发某个或者某些固定的SQL 触发器:类型 1.DML触发器 2.替代触发器 3.系统事件触发器 对数据表进行DML语句操作(insert、update、delete)时所触发的... -
Oracle (触发器)execute immediate 'sql语句'
2021-05-04 01:29:51create or replace trigger 名before or after DML(Insert ,uodate ,delete)on 表名begin执行语句end;/对操作进行日志备份create or replace trigger 名before insert on empbegininsert into emp_log(user,to_cahr... -
触发器SQL语句报错求解决
2019-06-02 21:37:011064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.PRICE : = 2000; END IF; END' at line 5 求解哪里... -
常用SQL语句大全
2019-03-04 16:25:33软件介绍 常用SQL语句大全 语 句 功 能 --数据操作 SELECT --从数据库表中检索数据行和列 INSERT --向数据库表添加新数据行 DELETE --从数据库表中删除数据行 ...Tags: 常用SQL语句大全 SQL语句大全 SQL -
SQL Server触发器及其操作语句
2017-05-16 14:56:28二、 SQL Server为每个触发器都创建了两个专用表﹕Inserted表和Deleted表。这两个表由系统来维护﹐它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行 完成后﹐与该... -
SQL Server数据库实验_存储过程与触发器设计.docx
2021-08-11 08:10:29SQL SERVER为每个触发器都创建了两个临时表INSERTED表和DELETED表,这两个表的逻辑结构与被触发器作用的表一样,用户可以读取这两个表的内容,但不能对它们进行修改,触发器执行完后,这两个表也会自动删除。... -
mysql:通过JDBC接口执行创建触发器的SQL语句
2022-03-24 10:40:10以下是从mysql官方文档《23.3.1 Trigger Syntax and Examples》抄来的一段创建触发器的SQL脚本, delimiter // CREATE TRIGGER upd_check BEFORE UPDATE ON account FOR EACH ROW BEGIN IF NEW.amount < 0 THEN ... -
sqlserver数据库查看触发器的构建语句
2019-12-14 15:43:17select * from sysobjects where xtype='TR' //这个语句可以查询所有的触发器 exec sp_helptext '触发器名' //找到触发器名字后,这个语句可以查询单个触发器的构建语句 ... -
SQL Server 存储过程和触发器sql语句练习
2015-12-18 22:25:31SQL Server 存储过程和触发器sql语句练习 -
sql触发器语句
2017-08-01 23:35:41-- 触发器语句格式 create trigger tr_order -- 创建监听器,监听名 before/after -- 什么时间进行监听,在发生什么行为之前或之后 insert/update/delete -- 对什么行为进行监听...`sql语句操作命令` end cr -
SQL触发器
2021-01-18 20:28:33语法: CREATE OR REPLACE TRIGGER '触发器名称' AFTER/BEFORE INSERT OR UPDATE OR DELETE ON '表名' FOR EACH ROW -
SQL创建触发器示例语句
2009-11-20 09:40:38SQL创建触发器:如何将两张表的数据同步更新 -
sqlserver 触发器学习(实现自动编号)
2020-12-15 17:54:02DDL触发器:在用户对数据库执行数据定义(CREATE、ALTER、DROP或相似的语句)对数据库结构进行修改时激活而做出响应。 DML触发器:在用户对数据库执行数据操作时发生,触发器中的代码会被自动调用。 2、DML触发器... -
mysql学习十八之mysql触发器学习,创建、删除、查看触发器,new,old关键字,多条sql语句下的触发器创建
2019-02-01 13:16:48一、什么是触发器? 1、mysql触发器是:在当前的数据库表中设置一个对每行数据的一个监听器,监听相关事件,每当事件发生时。...执行代码就是sql语句或sql语句块。 1、事件内容: 插入:insert ...