mysql触发器运算_在MySQL中使用触发器计算列值?

我有一个表ListLocations,其中包含列Name,StateID,CountryID和DisplayName。 stateid指的是列出美国/领土及其缩写的表格,countryid指的是国家及其缩写的表格,displayname是我想要显示的字符串,是name和州/国家缩写的组合。

为了实现displayname,我有一个存储过程,它在插入后/更新后运行locations表,如下所示-CREATE DEFINER=`root`@`%` PROCEDURE `updateLocationDisplayName`(in locationId int, in stateId int, in countryId int)

BEGIN

IF (stateId = -1 AND countryId = -1) OR (countryId = 220 and stateId = -1)

THEN

UPDATE listlocations

SET displayName = name

WHERE idx = locationId;

ELSEIF (countryId = 220 and stateId !=-1)

THEN

UPDATE listlocations ll

LEFT JOIN listunitedstates us ON us.idx = ll.stateIdx

SET displayName = CONCAT(ll.name, ', ', us.abbreviation)

WHERE idx = locationId;

ELSEIF (countryId != -1 AND countryId != 220)

THEN

UPDATE listlocations ll

LEFT JOIN listcountries lc ON lc.idx = ll.countryIdx

SET displayName = CONCAT(ll.name, ', ', lc.abbreviation)

WHERE idx = locationId;

END IF;

END

但是现在,尝试更新listlocations时,我得到错误代码:1442。 无法更新存储函数/触发器中的表“listlocations”,因为调用此存储函数/触发器的语句已经使用了该表。

在MySQL5.6中处理这种情况的“正确”方法是什么--您有一列是根据其他列计算的,并且您希望它在插入/更新时保持更新(并且在DB本身中处理,而不是在应用程序代码中处理)?

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值