标签归档:触发器

mssql sqlserver 如何避免数据表中的数据被删除呢?


摘要:
下文讲述禁止数据表中数据被删除的方法分享,如下所示;

最近遇到一个奇怪现象,数据表中的数据是不是被删除,目前也不知道是哪个环节
出问题了,由于本人小白程序媛,刚刚接手这个系统,目前无从下手,最后只能左思右想,
既然不知道出错的原因,那么就从数据库层面完全禁止这个数据表中的数据被删除,
让运行报错的用户直接打电话给我,下面讲述具体实现方式:

实现思路:
    直接在数据表上加上一个删除触发器,
 当遇到数据删除时,就报相应的错误

例:
在数据表上加入触发器-避免数据表执行数据删除操作

-- =============================================
-- Author:        maomao365.com
-- Create date: 2020-09-16
-- Description:  禁止数据表删除数据触发器
-- =============================================
CREATE TRIGGER dbo.trig_tbName_stopDelete
   ON  [数据表名称]
   AFTER DELETE
AS 
BEGIN
    SET NOCOUNT ON;
    RAISERROR('禁止删除-maomao365.com',16,1);
    ROLLBACK TRAN;
END
GO

数据库中触发器的坏处你知多少?


摘要:
下文通过文字的方式阐述数据库中使用触发器的坏处,如下所示;

触发器是隐藏在数据库内部的脚本,由数据库引擎自主的维系其运行方式,如果在系统中使用大量的触发器,会对系统后期产生大量的压力,下面将列举
触发器的坏处:

1. 触发器对一些跟踪不可见,当遇见错误时,我们无法及时跟踪其异常

2. 触发器对数据库间难移植,因为有些数据库无触发器机制

3. 触发器会加大数据库引擎的压力,容易造成死锁

在数据库的设计和开发中,我们应该尽可能的避免使用触发器,因为使用触发器会消耗数据库的资源;
我们应该让数据库回归其本质,作为一个数据的存储容器,对外只提供数据存储能力,让数据的运算交给专业的运算服务器进行。

mssql sqlserver sql脚本实现触发器中多个数据表之间联动(增加、修改、删除)操作操作的方法分享


摘要:
下文通过举例的方式讲述触发器中的insert update delete联动操作,如下所示:
实验环境:sql server 2008 R2

例:
下文通过举例的方式讲述“maomao365.comA”表上的进行增删改时,通过触发器自动联动操作至“maomao365.comB”表上的实现方式。

 
    ---建立基础表"maomao365.comA"和"maomao365.comB"
create table  [maomao365.comA]
(keyIdA int identity,
 infoA  varchar(100))
 go
 create table [maomao365.comB]
 (keyIdB int identity,keyIdAS int,
  infoB varchar(100))
  go

  ---创建增、删、改联动触发器
  ---同步新增触发器
  create trigger tr_maomao365_inserted
    on [maomao365.comA]
	 after insert 
  as
  begin
       insert into [maomao365.comB]
	   (keyIdAS,infoB)
	   select keyIdA,infoA from inserted 
  end
  go

  ---同步删除触发器
  create trigger tr_maomao365_delete
    on [maomao365.comA]
	 after delete 
  as
  begin
    delete from  [maomao365.comB]
	where keyIdAS in (select keyIdA from deleted) 
  end
  go


---同步修改触发器
  create trigger tr_maomao365_update
    on [maomao365.comA]
	 after update  
  as
  begin
    update   B 
	set B.infoB = a.infoA
	 from   [maomao365.comB]  B ,inserted a 
	 where  b.keyIdAS =a.keyIdA 
	 end
  go

  

  insert into [maomao365.comA]
  (infoA)values('sqlserver'),
  ('maomao')
  go

  select * from [maomao365.comB]


  update [maomao365.comA] 
  set infoA ='test' where keyIdA =1 


  select * from [maomao365.comB]


  delete [maomao365.comA] 
  where keyIdA =1 
  
  
  select * from [maomao365.comB]
  



  go

  drop table [maomao365.comA]
  drop     table [maomao365.comB]
  
mssql_sqlserver_触发器实现的数据联动

mssql_sqlserver_触发器实现的数据联动