触发器、事务

触发器的关键字为trigger,分为inserted 和 Deleted

理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted Inserted分别表示触发事件的表旧的一条记录新的一条记录。 
     一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是: 

Inserted和Deleted区别
 虚拟表Inserted虚拟表Deleted
在表记录新增时存放新增的记录
不存储记录
修改时  存放用来更新的新记录 存放更新前的记录
删除时不存储记录  存放被删除的记录


                                                 

                            
                                   
                                              

 

 

 

 

---------------------实例----------------------------

---创建数据表
CREATE TABLE T_Product
(
    P_Id INT PRIMARY KEY IDENTITY,
    P_Name NVARCHAR(24),
    P_Quantity INT,
    P_Price DECIMAL,
    T_Id INT
)

 

--创建订单表
CREATE TABLE T_Order
(
    O_Id INT PRIMARY KEY IDENTITY,
    P_Id INT,
    O_Num INT
)

------------------创建触发器--------------------

CREATE TRIGGE TriAdd ----定义触发器名称
ON T_Order----定义触发的表
FOR INSERT ---定义用那种方法触发
AS
BEGIN

  --定义变量
    DECLARE @num INT;
    DECLARE @id INT;
    
    --查找商品表的ID
    SELECT @id=P_Id FROM INSERTED
    

  --查找订单表的数量
    SELECT @num=O_Num FROM INSERTED
    

  ---修改商品表中的数量
    UPDATE T_Product SET P_Quantity-=@num WHERE P_Id=@id
    
END

///

CREATE TRIGGER triAdd
ON dbo.T_Order
AFTER INSERT
AS
BEGIN
    DECLARE @num INT;
    DECLARE @sum INT;
    DECLARE @id INT;
        
    SELECT @id=P_Id,@num=O_Num FROM INSERTED
        
    SELECT @sum=P_Quantity FROM T_Product WHERE P_Id=@id
    
    UPDATE T_Product SET P_Quantity=@sum-@num WHERE P_Id=@id    
END

 

--------------------------------------事务----------------------------------------------

开始事物:BEGIN TRANSACTION
提交事物:COMMIT TRANSACTION
回滚事务:ROLLBACK TRANSACTION

BEGIN TRAN --开始事务


    INSERT INTO T_Order VALUES(1,1)
    INSERT INTO T_Order VALUES(1,5)
    INSERT INTO T_Order VALUES(2,2)
    
---事务提交          
COMMIT TRAN

 

---用一条sql语句查询出“每门”课程都大于80分的学生姓名

Name chengji fengshu
张三 数学 75
张三 语文 81
李四 数学 90
李四 语文 76
王五 数学 81
王五 语文 100
王五 英语 90

 给个思路,供参考:

先查出低于80分的学生名单,然后再用姓名作为条件对比,排除刚才查到的学生

SQL Server:

select distinct [Name] from [表] where [Name] not in

(
  select [Name] from [表] where [fengshu] < = 80
)

转载于:https://www.cnblogs.com/lhn5xy/p/7911768.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值