如何创建触发器,先更新1列,然后更新另一列?

时间:2019-04-01 16:09:32

标签: mysql sql triggers

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

这是我的桌子

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中的数据]

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

TRIGGER

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 会员编号620000 包ID 1003 VipExpire 2019-08-01 交易日期2019-04-03

1 个答案:

答案 0 :(得分:0)

我认为您需要这样的东西:

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设置为新值。