我很困惑如何在我更新 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
我需要将 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/