触发器SQL

--触发器:执行一个操作会自动 触发另外 一些 操作
--触发器是针对有可能修改表数据的操作而言:增加删除和修改,对查询没用。
--触发器是针对于某一个表执行什么样的操作进而触发触发器
--语法:
--create trigger tr_表.操作
--after/for:操作之后触发
--instead of:不执行当前操作,而使用触发器中的操作进行替代
--on 操作的表 after/for|instead of insert|delete|update
--as
-- 逻辑语句
--go
if exists(select * from sysobjects where name=‘tr_classes_insert‘)
drop trigger tr_classes_insert
go
create trigger tr_classes_insert
on classes instead of insert
as
select * from student
select * from result
delete from classes where classid=21
go

insert into Classes values(‘恭恭敬敬‘)

--关注inserted deleted表
select * from inserted
select * from deleted

if exists(select * from sysobjects where name=‘tr_classes_insert‘)
drop trigger tr_classes_insert
go
create trigger tr_classes_insert
on classes after insert
as
print ‘inserted:是操作之后的表,它是存储操作之后的数据,数据与原始的物理表没有关系,只与当前这次操作所影响的数据有关‘
select * from inserted
print ‘deleted:是操作之前的表,它是存储操作之前的数据,只存储与当前操作相关的数据‘
select * from deleted
go
insert into Classes values(‘gg‘)

if exists(select * from sysobjects where name=‘tr_classes_update‘)
drop trigger tr_classes_update
go
create trigger tr_classes_update
on classes after update
as
print ‘inserted:是操作之后的表,它是存储操作之后的数据,数据与原始的物理表没有关系,只与当前这次操作所影响的数据有关‘
select * from inserted
print ‘deleted:是操作之前的表,它是存储操作之前的数据,只存储与当前操作相关的数据‘
select * from deleted
go
update Classes set classname=classname+‘123‘ where ClassId>18

if exists(select * from sysobjects where name=‘tr_classes_delete‘)
drop trigger tr_classes_delete
go
create trigger tr_classes_delete
on classes after delete
as
print ‘inserted:是操作之后的表,它是存储操作之后的数据,数据与原始的物理表没有关系,只与当前这次操作所影响的数据有关‘
select * from inserted
print ‘deleted:是操作之前的表,它是存储操作之前的数据,只存储与当前操作相关的数据‘
select * from deleted
go

delete from Classes where ClassId>18

if exists(select * from sysobjects where name=‘tr_classes_insert‘)
drop trigger tr_classes_insert
go
create trigger tr_classes_insert
on classes after insert
as
declare @cid int,@cname nvarchar(50)
select @cid=classid,@cname=classname from inserted
--判断当前插入的班级名称是否在原始的物理中存在过
if((select count(*) from classes where [email protected])>1)
begin
print ‘已经存在‘
delete from classes where [email protected]
end
else
print ‘ok‘
go
insert into Classes values(‘ggg‘)

时间: 2024-11-10 00:45:47

触发器SQL的相关文章

oracle生成多表触发器sql

--将所有HY开头的表都生成一个更新触发器的脚本('/'是为了连续创建多个触发器而不报错)select 'CREATE OR REPLACE TRIGGER '||table_name||' BEFORE UPDATE on '||table_name||' REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW DECLARE BEGIN IF updating THEN :NEW.C_UPDATE_TIME:= SYSDATE; IF :NEW.C_DA

存储过程给指定表绑定触发器sql里拼json作存储日志

项目给出了一个新的需求,利用触发器生成日志表,监听对数据库中关键表的增删改操作.将操作的数据拼成json格式作为一个clob存入oracle. 1 create or replace procedure Logging_Messages(tableName varchar2 default '%') is 2 cursor c_cl IS 3 SELECT column_name tcl 4 FROM user_tab_columns 5 WHERE table_name = upper(tab

SQL 触发器-如何查看当前数据库中有哪些触发器

在查询分析器中运行: use 数据库名goselect * from sysobjects where xtype='TR' sysobjects 保存着数据库的对象,其中 xtype 为 TR 的记录即为触发器对象.在 name 一列,我们可以看到触发器名称. SQL 触发器-创建一个简单的触发器 SQL 触发器-重命名触发器 SQL 触发器-删除触发器 SQL 触发器-触发器更多语法 SQL 触发器-如何查看某个触发器的内容 SQL 触发器-多个触发器 SQL 触发器-递归.嵌套触发器 SQ

SQL Server 数据库DML触发器 【一】

今天学习SQL Server数据库中DML触发器(DDL触发器以后有时间继续学习). 当删除一条创建有触发器的表中的内容时,触发器执行SQL语句. 1.首相先创建一张表,表名称是 [Test] , 内有三个字段,分别是 [Name], Sex, Place. 1 use inter 2 create table Test 3 ( 4 [Name] varchar(20) not null, 5 Sex varchar(20) not null, 6 Place varchar(20) not n

SQL之trigger(触发器)

先来看一小段程序 有如下三张表: 帐户(编号,姓名,余额,建立日期,储蓄所编号) 储蓄所(编号,名称,地址,人数,所属城市) 借贷(帐户,借贷类型,金额,日期) 1 create trigger tri_bank_delete 2 on bank for delete as 3 declare @count_account_of_bank int 4 select @count_account_of_bank=COUNT(*) 5 from account 6 where bank_ID=(se

SQL Server 存储过程、触发器、游标

存储过程 1.存储过程是事先编好的.存储在数据库中的程序,这些程序用来完成对数据库的指定操作. 2.系统存储过程: SQL Server本身提供了一些存储过程,用于管理有关数据库和用户的信息. 用户存储过程: 用户也可以编写自己的存储过程,并把它存放在数据库中,供客户端调用. 3.这样安排的主要目的就是要充分发挥数据库服务器的功能,尽量减少网络上的堵塞. 4.系统存储过程 概念: 它的目的在于能够方便地从系统表中查询信息,或者完成与更新数据库表相关的管理任务或其它的系统管理任务. 系统存储过程可

开发PL/SQL子程序和包及使用PL/SQL编写触发器、在JDBC中应用Oracle

1.  子程序的各个部分: 声明部分.可执行部分.异常处理部分(可选) 2.子程序的分类: A.  过程 - 执行某些操作 a.  创建过程的语法: CREATE [OR REPLACE]  PROCEDURE  <procedure name> [(<parameter list>)]  IS|AS <local variable declaration> BEGIN <executable statements> [EXCEPTION <excep

SQL Server 触发器创建、删除、修改、查看示例

一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发器都创建了两个专用表﹕Inserted表和Deleted表.这两个表. 一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发器都创建了两个专用表﹕Ins

SQL Server触发器创建、删除、修改、查看示例步骤

SQL Server触发器创建.删除.修改.查看示例步骤 一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发器都创建了两个专用表﹕Inserted表和Deleted表.这两个表. 一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束.