1. 首页 > 智能数码 >

数据库的触发器怎么写 数据库的触发器怎么写出来

SQL触发器写法

触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。SQL3的触发器是一个能由系统自动执行对数据库修改的语句。

数据库的触发器怎么写 数据库的触发器怎么写出来数据库的触发器怎么写 数据库的触发器怎么写出来


数据库的触发器怎么写 数据库的触发器怎么写出来


基本语法

create trigger tri_name

on table

for insert/update/deleted

as

SQL code

例:

create trigger tri_mc(tri_mc:自定义触发器的名称)

on table (table:触发的表名)

for insert (触发类型:insert,插入数据触发 update,更新数据触发 delete,删除数据触发)

as

declare @kssj datetime (定义一个变量,做中间处理)

declare @sqbh char(40)

select @kssj = kssj,@sqbh = sqbh from inserted

(插入数据时,插入的数据在表 inserted

更新数据时,更新后的数据在表 inserted 更新前的数据在表中 deleted

删除数据时,删除的数据在表 deleted

不同的作可以,取出不同的中间数据,做处理,例子中取出插入的数据)

update table2 set isks = 1,kksj = @kssj where sqbh = @sqbh

(根据中间处理做相应作,例子的处理为,将插入的值同步更新到另一个表)

仔细看看这段代码:

Update BorrowRecord

Set br.StudentID=i.StudentID

From BorrowRecord br , Deleted d ,Inserted i

Where br.StudentID=d.StudentID

From BorrowRecord br , Deleted d ,Inserted i

表示用别名br来代替BorrowRecord ,用d来代替Deleted,用d来代替Inserted。

明白了么?

Good Luck!

CREATE TRIGGER TG_UPT_TTD ON [dbo].[TABLE]

FOR INSERT, UPDATE

AS

update TABLE

set D = 'TRUE'

from TABLE,INSERTED d

where TABLE.主键 = d.主键

AND table.A = 'TRUE'

AND table.B = 'TRUE'

AND table.C = 'TRUE'

create trigger dbo.SetTrue

on YourTable for update

as

if exists (select 'True'

from inserted as i

where i.a = true and i.b = true and i.c = true )

update YourTable

set YourTable.d = true

where YourTable.a = true and YourTable.b = true and YourTable.c = true

ALTER trigger [dbo].[trg_allwage]

on [dbo].[Factory]

after insert

as

begin

declare @allwages float

select @allwages=sum(wages) from dbo.employee

update dbo.Factory set allwages=@allwages where factory='A1001'

end

这样改试一下。

declare @wages float,@allwages float

select @wages=sum(wages) from dbo.employee

print @allwages

update dbo.Factory set allwages=@wages where factory='A1001'

create trigger t_update on [table]

for update

as

update [table] set d=1 where a=1 and b=1 and c=1

在数据库里怎么使用触发器?

触发器是一类特殊的存储过程,开发人员也可以定义、编写符合业务需求的触发器来维护数据的完整性。触发器的控制流程及控制语句与存储过程相同,但触发器与存储过程还是有相当大的别,触发器的定义格式及开启方式与存储过程不同,作为数据管理员或编程人员,熟练掌握触发器的用法对维护、作数据库非常重要。基本语法1.创建触发器语法格式创建语法:CREATETRIGGER+触发器名称+触发时间点+触发事件+ON+表名+FOREACHROWBEGIN…END其中,触发时间点:BEFORE或AFTER,指明是在触发事件之前还是之后执行。

触发事件:INSERT、UPDATE、DELETE事件。例如,以下语句创建一个名字叫upd_check的触发器,其在对account表作更新(UPDATE)作之前(BEFORE)自动触发。

CREATETRIGGERupd_checkBEFOREUPDATEONaccountFOREACHROWBEGIN…END2.删除触发器语法格式DROPTRIGGER+触发器名称3.触发器案例用tab.sql脚本创建表环境,然后用下面语句创建触发器。当往tab1表添加记录后将触发此触发器,将此新记录同时插入tab2表中。

DELIMITER//DROPTRIGGERIFEXISTSt_afterinsert_on_tab1;CREATETRIGGERt_afterinsert_on_tab1AFTERINSERTONtab1FOREACHROWBEGINinsertintotab2(tab2_id)values(new.tab1_id);END;//DELIMITER;当用下面语句往tab1表插入记录时,tab2表中同时也添加了同样的记录,如图tab1数据表

tab1数据表

tab2数据表

INSERTINTOtab1(tab1_id)values('0001')

tab.sql

触发器的写法

create table A(ID int)

creaste table B(ID int,ID2 int default(0))

create trigger tr_A on A

after insert

as

insert B(ID) select ID from inserted

go

实例2

create table A(ID int)

creaste table B(ID int,ID2 int)

create trigger tr_A on A

after insert

as

insert B(ID,ID2) select ID,ID2=0--在触发器里定义

from inserted

求解答,sql server数据库触发器怎么写

基本语法

create trigger tri_name

on table

for insert/update/deleted

as

SQL code

例:

create trigger tri_mc(tri_mc:自定义触发器的名称)

on table (table:触发的表名)

for insert (触发类型:insert,插入数据触发 update,更新数据触发 delete,删除数据触发)

as

declare @kssj datetime (定义一个变量,做中间处理)

declare @sqbh char(40)

select @kssj = kssj,@sqbh = sqbh from inserted

(插入数据时,插入的数据在表 inserted

更新数据时,更新后的数据在表 inserted 更新前的数据在表中 deleted

删除数据时,删除的数据在表 deleted

不同的作可以,取出不同的中间数据,做处理,例子中取出插入的数据)

update table2 set isks = 1,kksj = @kssj where sqbh = @sqbh

(根据中间处理做相应作,例子的处理为,将插入的值同步更新到另一个表)

C#谁能给我写个数据库的触发器的示例

触发器是数据库的功能,在数据库定义了触发器后,

只需要有INSERT,UPDATE或者DELETE数据,就可以触发

和C#没什么关系

--SQLServer触发器例子-----------

CREATE TRIGGER 触发器名字

ON 表名

FOR INSERT, UPDATE, DELETE ---可以单独FOR INSERT等

AS

PRINT '成功触发'

关于MYSQL触发器写法

建议不要使用系统的关键字把ID该为其他的字段名

create

trigger

yx

on

评论表

after

insert

as

declare

@N

bigint

declare

@NO

varchar(50)------/商品ID是字符型的/

select

@NO=商品ID

from

inserted

select

@N=评论人数

from

商品表

where

商品ID=@NO

UPDATE

商品表

set

评论人数=@N+1

where

商品ID=@NO

我不知道你的表怎么做的所以具体的还是要你自己来改.

有什么不懂,在提出来.

这个是评论次数,不能算是评论人数,一个人可以评论多次而且算数,

如果要统计人数还要在

用户名

上做文章

这个我也不懂。

如何使用C#代码实现数据库触发器的功能

DML触发器有三类:

1, insert触发器;

2, update触发器;

3, delete触发器;

触发器的组成部分:

触发器的声明,指定触发器定时,事件,表名以类型

触发器的执行,PL/SQL块或对过程的调用

触发器的限制条件,通过where子句实现

类型:

应用程序触发器,前台开发工具提供的;

数据库触发器,定义在数据库内部由某种条件引发;分为:

DML触发器;

数据库级触发器;

替代触发器;

DML触发器组件:

1,触发器定时

2,触发器事件

3,表名

4, 触发器类型

5, When子句

6, 触发器主体

可创建触发器的对象:数据库表,数据库视图,用户模式,数据库实例

创建DML触发器:

Create [or replace] trigger [模式.]触发器名

Before| after insert|delete|(update of 列名)

On 表名

[for each row]

When 条件

PL/SQL块

For each row的意义是:在一次作表的语句中,每作成功一行就会触发一次;不写的话,表示是表级触发器,则无论作多少行,都只触发一次;

When条件的出现说明了,在DML作的时候也许一定会触发触发器,但是触发器不一定会做实际的工作,比如when 后的条件不为真的时候,触发器只是简单地跳过了PL/SQL块;

Insert触发器的创建:

create or replace trigger tg_insert

before insert on student

begin

dbms_output.put_line('insert trigger is chufa le .....');

end;

执行的效果:

SQL> insert into student

2 values(202,'dongqian','f');

insert trigger is chufa le .....

update表级触发器的例子:

create or replace trigger tg_updatestudent

after update on student

begin

dbms_output.put_line('update trigger is chufale .....');

end;

运行效果:

SQL> update student set se='f';

update trigger is chufale .....

已更新8行;

可见,表级触发器在更新了多行的情况下,只触发了一次;

oracle的触发器怎么写

我以前做的一个例子,你参考下吧第八章触发器(Trigger)--格式:createorreplacetrigger名称[after|before][delete|update|insert][on表|onschema][referencingnewas别名oldas别名][foreachrow]declare.beginexception.end;--创建一个delete类型行级触发器--删除的一行数据保存在:oldcreateorreplacetriggeremp_delete_row_triggerafterdeleteonempreferencingnewasnoldasoforeachrowbegindbms_output.put_line('emp_delete_row_triggercalled.');dbms_output.put_line('删除员工:'||:o.empno||''||:o.ename);end;deletefromempwhereempno=7499;deletefromemp;--创建一个insert类型行级触发器--插入的一行新数据保存在:newcreateorreplacetriggeremp_insert_row_triggerafterinsertonempforeachrowbegindbms_output.put_line('emp_insert_row_triggercalled.');dbms_output.put_line('添加员工:'||:new.empno||''||:new.ename);end;insertintoemp(empno,ename)values(1,'empxxx');--创建一个update类型行级触发器--修改前的数据保存在:old--修改后的数据保存在:newcreateorreplacetriggeremp_update_row_triggerafterupdateonempforeachrowbegindbms_output.put_line('emp_update_row_triggercalled.');dbms_output.put_line('修改前:'||:old.empno||''||:old.ename);dbms_output.put_line('修改后:'||:new.empno||''||:new.ename);end;updateempsetename='xxxx'whereempno=7499;--语句级触发器(update,delete,insert)createorreplacetriggerdelete_stmt_triggerafterdeleteonempbegindbms_output.put_line('delete_stmt_triggercalled.');end;deletefromemp;--判断触发器类型------------------------------------------------------------每进行一次交易,就要调用触发器,自动扣除或增加账户金额----------------------------------------------------------createtableaccount(customerNamevarchar2(30)primarykey,cardIDvarchar2(8),currentMoneynumber);insertintoaccountvalues('Daivd','10010001',5000);insertintoaccountvalues('Jason','10010002',3000);createtabletrans(transDatedate,cardIDvarchar2(8),transTypevarchar2(10),transMoneynumber);insertintotransvalues(sysdate,'10010001','取款',1000);createorreplacetriggertrans_triggerbeforeinsertontransforeachrowdeclarev_currentMoneyaccount.currentMoney%type;begin--判断类型if:new.transType='取款'then--取款selectcurrentMoneyintov_currentMoneyfromaccountwherecardID=:new.cardID;ifv_currentMoney<:new.transMoneythenraise_application_error(-20001,'余额不足');endif;updateaccountsetcurrentMoney=currentMoney-:new.transMoneywherecardID=:new.cardID;else--存款updateaccountsetcurrentMoney=currentMoney+:new.transMoneywherecardID=:new.cardID;endif;exceptionwhenno_data_foundthenraise_application_error(-20002,'无效的帐户');end;--模式(schema)级触发器createorreplacetriggerschema_triggerbeforedroponschemabegindbms_output.put_line('schema_triggercalled');dbms_output.put_line(ora_dict_obj_name);dbms_output.put_line(ora_dict_obj_type);ifora_dict_obj_name='ACCOUNT'thenraise_application_error(-20003,'ACCOUNT表不能被删除');endif;end;droptableaccount;--ora_dict_obj_name作对象名称--ora_dict_obj_type作对象类型--启用触发器altertriggerschema_triggerenable;--禁用触发器altertriggerschema_triggerdisable;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息