数据库中的“触发器”是什么意思?

发布网友 发布时间:2022-04-23 01:55

我来回答

4个回答

懂视网 时间:2022-04-30 14:21

/****** Object: Trigger [dbo].[部门_Delete] Script Date: 2015/8/31 16:41:46 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,Ammy,Name> -- Create date: <Create Date,,> -- Description: <Description,显示一次操作触发器修改了多少条记录,> --因为每个操作类型在一次操作时,对一个触发器只激活一次,但是运行的操作可能更新或删除了10条记录, --Inserted表和Deleted表里会有10条记录,用系统变量@@ROWCOUNT 可以得知上一次操作所更改的记录数 -- ============================================= CREATE TRIGGER [dbo].[部门_Delete] ON [test].[dbo].[部门表] AFTER DELETE AS BEGIN PRINT ‘您此次删除了‘+CAST(@@ROWCOUNT AS VARCHAR)+‘条记录‘ END GO

部门表_插入:

 

USE [test]
GO

/****** Object: Trigger [dbo].[部门_Insert] Script Date: 2015/8/31 16:42:29 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author: <Author,Ammy,Name>
-- Create date: <Create Date,2015/08/19,>
-- Description: <Description,部门表插入时发出提示:又添加了一种产品,并向日志表插入一条记录>
-- =============================================
CREATE TRIGGER [dbo].[部门_Insert]
ON [dbo].[部门表]
AFTER INSERT
AS
BEGIN
 DECLARE @事件部门名称 NVARCHAR(50)

 SELECT @事件部门名称=部门名称 FROM inserted

 IF(SELECT LEN(电话号码) FROM inserted )<>11
 BEGIN
  PRINT‘电话号码位数必须是11位‘
  ROLLBACK TRANSACTION
 END
 ELSE
 BEGIN
  print ‘又添加了一个部门‘
  INSERT INTO test.dbo.日志表(事件名,事件人,事件时间)VALUES(‘添加新部门:‘+@事件部门名称,‘admin‘,GETDATE());
  --设置此TRIGGER的嵌套类型为true,如果在 dbo.日志表 上建立触发器,会触发激活dbo.日志表_Insert 触发器
 END

END

GO

部门表_更新:

USE [test]
GO

/****** Object: Trigger [dbo].[部门表_只能修改部门编号] Script Date: 2015/8/31 16:43:17 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author: <Author,Ammy,Name>
-- Create date: <Create Date,2015-08-20,>
-- Description: <Description,用update(字段名),完成只能修改某字段的触发器>
-- =============================================
CREATE TRIGGER [dbo].[部门表_只能修改部门编号]
ON [dbo].[部门表]
Instead of UPDATE
AS
BEGIN
 SET NOCOUNT ON;
 IF UPDATE(部门编号)
 BEGIN
  DECLARE @部门编号 NVARCHAR(20),
   @部门名称 NVARCHAR(20),
   @部门职责 Nvarchar(20)

  SET @部门编号=(SELECT 部门编号 FROM inserted)
  SET @部门名称=(SELECT 部门名称 FROM inserted)
  SET @部门职责 =(SELECT 部门职责 FROM inserted)

  UPDATE 部门表 SET 部门编号=@部门编号
  WHERE 部门名称=@部门名称--AND 部门编号=@部门编号 AND @部门职责=@部门职责
  --这种写法很不好,因为只能操作的语句只能按这种修改才起作用
 END 
 ELSE
 BEGIN 
  PRINT ‘只能修改部门编号‘
  RAISERROR(‘除了部门编号之外的字段都不允许修改‘,16,5)
  --PRINT 输出自定义信息,但是只能在查询编辑器窗格中运行SQL语句才能看到这些自定义的信息,
  --而其他的前端应用程序都不会显示这些自定义的信息
 END
END


GO

日志表触发器:

USE [test]
GO

/****** Object: Trigger [dbo].[日志表_Insert] Script Date: 2015/8/31 16:44:11 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE TRIGGER [dbo].[日志表_Insert]
ON [test].[dbo].[日志表]
AFTER INSERT
AS 
BEGIN
 PRINT‘数据库又有记录变动了‘
END
 

GO

 

数据库触发器_trigger

标签:

热心网友 时间:2022-04-30 11:29

在SQL中,名词触发器指“在数据库中为响应一个特殊表格中的某些事件而自动执行的程序代码。”(Wikipedia)说得简单一些,它是在一个特殊的数据库事件,如INSERT或DELETE发生时,自动激活的一段代码。触发器可方便地用于日志记录、对单个表格到其他链接式表格进行自动的“层叠式”更改、或保证对表格关系进行自动更新。当一个新整数值增加到数据库域中时,自动更新运行的总数的代码段是一个触发器。自动记录对一个特殊数据库表格所作更改的SQL命令块也是一个触发器实例。
参考:
http://www.nmzol.com/ns/2007/200705/2007-05-05/ns_20070505214010_16672.html

热心网友 时间:2022-04-30 12:47

建议不要使用系统的关键字把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
我不知道你的表怎么做的所以具体的还是要你自己来改.
有什么不懂,在提出来.
这个是评论次数,不能算是评论人数,一个人可以评论多次而且算数,
如果要统计人数还要在
用户名
上做文章

热心网友 时间:2022-04-30 14:22

触发器的概念:
触发器英文名trigger,是指数据库中为响应一个特殊表格中的某些事件而自动执行的程序代码。
为什么要使用触发器:
触发器通常在进行登录或者对表作修改时触发,可以作为登录验证或者数据监控。换句话说,触发器是用来管理数据库的,很少用来操作数据。比如,我要知道谁在什么时候修改了Test表,修改了什么,就要使用触发器了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com