数据库 触发器

数据库 触发器,第1张

具体的语法会有错误,我这里没打开SQL

大致如下:

create triger onsale on insert (呵呵,这条语句很多错误,你自己纠正下就好)

begin

update b set bnumber=bnumber-cnumber from book b inner join inserted c on bbookisbn=cbookisbn

end

当然,上面的UPDATE语句可以进一步优化:

declare @number int;

declare @isbn char(13)

select @number=number, @isbn=bookisbn from inserted

update book set number=number-@number where bookisbn=@isbn

此外,好像可以在表设计里实现联动,当booksale变动后,自动更新book,具体的没怎么 *** 作过,就忽略了。

代码如下:

alter table SC

Drop constraint  FK_SC--删除外键约束

CREATE TRIGGER  trig_insert  ON SC--在SC表中创建trig_insert触发器

AFTER INSERT--insert为触发事件,after则为触发的时机

AS  IF  NOT EXISTS(

SELECT  FROM Course,

inserted where CourseCno=insertedCno)  --向SC表插入数据时,检查插入数据的课程号是否存在于Course表中

begin  print'插入的课程号不在课程表中'--出错提示  rollback  

END测试触发器:

insert into SC VALUES('201215130','2','78');--命令成功执行

INSERT INTO SC VALUES('201215131','10','78');--事务在触发器中结束。

批处理已中止

扩展资料

触发器是由事件来触发某个 *** 作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,会激活促发其执行相应的 *** 作。

SQL触发器,是一种特殊类型的存储过程,不由用户直接调用。它在指定的表中的数据发生变化时自动生效。唤醒调用触发器以响应 INSERT、UPDATE 或 DELETE 语句。他可以查询其它表,并可以包含复杂的Transact-SQL语句。

将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到严重错误(例如,磁盘空间不足),则整个事务即自动回滚。常常用于强制业务规则和数据完整性。

参考资料来源:

百度百科——触发器

这个你得建插入、删除和更新三种触发器。

create trigger tr_in_选课表 on 选课表

FOR INSERT

as

update 课程表 set 选课人数=选课人数+1 where 课程编号=(select 课程编号 from inserted)

go

CREATE TRIGGER 触发器名称

ON A

after insert

AS

if insertedaw>90

insert into b(id,aw)values (insertedid,insertedaw)

end

navicat

for

mysql中如何添加delete触发器

navicat

for

mysql

中,选中数据表—鼠标右键—设计表,有一个触发器的设置,然后:

设置一个触发器名称,触发选择after,勾中插入

在下面的框中:(仅是举例)

begin

insert

into

transfer(id,a1,a2,cz,qtime)

values(newid,values1,values2,'已点',newordertime)

end

1.使用T-SQL语句创建触发器

创建触发器使用CREATE TRIGGER语句。 语法格式如下:

CREATE TRIGGER 触发器名ON 表名 [WITH ENCRYPTION]

FOR {[DELETE][,][INSERT][,][UPDATE] } [NOT FOR REPLICATION] AS

SQL语句

[RETURE 整数表达式]

触发器作为一种数据库对象,在syscomment 表中存储有完整的文本定义信息。可以使用WITH ENCRYPTION 对访问syscomment表的入口进行加密。

NOT FOR REPLICATION: 定义在复制过程中,不执行触发器 *** 作。 例1创建一个针对LWQK 表的触发器,打印共修改了多少行数据。

use lwzz

if exists (select name from sysobjects where name='tr_lwqk_update' and type='tr') drop trigger tr_lwqk_update go

use lwzz go

create trigger tr_lwqk_update on lwqk for update as

declare @msg varchar(100)

select @msg=str(@@rowcount)+'lwzz updated by this statement' print @msg return

go

在CREATE TRIGGER语句中不能使用SELECT语句返回对表格查询的数据,因为触发器不接受用户应用程序传递的参数,从而也无法向用户应用程序返回查询表格数据所得到的结果。 在创建触发器的语句中,禁止使用下列T-SQL语句: ALTER DATABASE ALTER PROCEDURE ALTER TABLE ALTER TRIGGER ALTER VIEW CREATE DATABASE CREATE DEFAULT CREATE INDEX CREATE PROCEDURE CREATE RULE CREATE TABLE CREATE TRIGGER DROP DATABASE DROP DEFAULT DROP INDEX DROP PROCEDURE DROP RULE DROP TABLE DROP TRIGGER DROP VIEW

GRANT RESTORE DATABASE RESTORE LOG REVOKE

TRUNCATE TABLE

由于系统表所存储数据的特殊性和重要性,所以建议用户不要自己在系统表上建立触发器。 在创建触发器时,不允许RETURN返回体现运行状态的数据。

例2创建一个当LWQK表执行INSERT、UPDATE *** 作时触发的触发器。

create trigger tr_products_insupd

on lwqk

for insert,update as

……

由于SQL Sever 支持在同一个表的同一种 *** 作类型上建立多个触发器,所以当建了tr_products_insupd触发器后,在LWQK表执行INSERT *** 作时将触发tr_products_insupd触发器,在执行UPDATE *** 作时将触发tr_product_update和tr_products_insupd触发器,他们都是有效的触发器。

触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效。唤醒调用触发器以响应 INSERT、UPDATE 或 DELETE 语句。触发器可以查询其它表,并可以包含复杂的Transact-SQL语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到严重错误(例如,磁盘空间不足),则整个事务即自动回滚。

以上就是关于数据库 触发器全部的内容,包括:数据库 触发器、在数据库中建立一个触发器:当学生表student中插入一个新同学时,就会显示所有的同学的信息、怎么为另外一个数据库添加已经写好的触发器等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9858534.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存