mysql - 如何创建更新 1 列然后更新另一列的触发器?

标签 mysql sql triggers

我很困惑如何在我更新 1 列时创建触发器,其他列也会更新 [所有列都在同一个表中]

这是我的 table

create table VIP( 
    VipID                int identity (10001,1)  not null, 
    PackageID            Char(10) not null, 
    Vip_Expire           Date     null,
    DateofTransaction    date     null, 
constraint VIP_PK primary key(VipID), 
constraint VIP_FK1 foreign key(MemberID)  
  references MEMBER(MemberID), 
constraint VIP_FK2 foreign key(PackageID)   
  references Package(PackageID)

然后我需要更新 PackageID

1.DateofTransaction 是你更新的日期
2.Vip_expire是你更新的日期+Packagedays[PackageTable中的数据]

我尝试在我的触发器中使用此代码并尝试像这样更新。

触发

create trigger VIP_UPDATE on VIP
after update
.
.
.
select packagedays
from package
where @packagedays = packagedays 
    update vip
    set PackageId = @newpackage,
        Dateoftransaction = CONVERT (date, GETDATE()),
        Vip_Expire = dateadd(day, @packagedays, CONVERT (date, GETDATE()))
    where PackageID = @oldPackage and
          Vip_expire = @OldVip_expire and
          Dateoftransaction = @OldDateT

例如 enter image description here

我需要将 PackageID 从“1002”更新为“1003” '1003' 有 120 天 [VIPID 10001]

所以应该的结果是 VIPID 10001 成员(member)编号 620000 包 ID 1003 Vip过期 2019-08-01 交易日期 2019-04-03

最佳答案

我想你需要这样的东西:

create trigger VIP_UPDATE
after update on VIP
for each row
begin
  if (new.PackageID <> old.PackageID) then
    set new.DateofTransaction = current_date();
    set new.Vip_Expire = (
        select current_date() + interval p.Packagedays day
        from Package p
        where p.PackageID = new.PackageID
    );
  end if;
end

当您想要更改已更新的同一行中的列时,您无需在触发器中编写 UPDATE 语句。您只需将 NEW.column_name 设置为新值即可。

关于mysql - 如何创建更新 1 列然后更新另一列的触发器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55459369/

相关文章:

autocomplete - SublimeText 移除自动完成触发器

mysql - 如何使用日期范围过滤 mysql 查询

MySQL 查找包含特定产品的所有订单,并且仅查找该产品

sql - 在层次结构中查找最新对象,其中最新对象未标记为已删除

sql查询以获取每个座位数收入最高的餐厅表

sql - 数据建模帮助 - 我是否要添加另一个表、更改现有表的用法或其他什么?

postgresql - 使用 PostgreSQL 触发器对数据进行动态审计

sql - 为什么我们需要触发器来从 View 中删除?

用户的 MySQL 投票历史记录以及每个项目的总投票数

php - 如何从 foreach 循环生成的下拉列表中获取和显示值