解决更新同一张表的触发器

时间:2018-09-17 04:48:39

标签: mysql stored-procedures triggers generated

我正在MySQL中建立一个nba_players表。它具有一列以英寸为单位的球员身高(pl_ht_inches)。它还有一列(pl_ht_feet),其中列出了以英尺为单位的球员身高。例如,nba_player Michael Jordan的pl_ht_feet ='6-6',并且使用以下语句更新pl_ht_inches:

update nba_players ab inner join feet_hieght_tb bc on ab.pl_ht_feet = bc.hieght set ab.pl_ht_inches = bc.total_inches

此语句使用具有两列的表“ feet_hieght_tb”更新nba_players.pl_ht_inches

  1. hieght-hieght varchar(4),其数据为'6-6',这是英制测量
  2. total_inches int(3),它以英寸为单位列出高度。例如hieght'6-6'将是total_inches = 78。

然后我将触发器与update语句一起使用。随后,我发现您无法在该表的触发器中引用与插入语句相同的表。触发器的内容如下:

delimiter $$ create trigger after_nba_players_insert
after insert on nba_players for each row begin update nba_players ab
inner join feet_hieght_tb bc on ab.pl_ht_feet = bc.hieght set ab.pl_ht_inches = bc.total_inches; end$$ delimiter ;

当我尝试将新数据插入nba_players时,这会产生错误1442,这意味着触发器正在更新与nba_players表中的插入相同的表。

因此,我然后尝试通过创建一个存储过程来触发更新,该存储过程中包含了与触发器相同的更新语句。在插入nba_players之后,我可以手动调用该过程,并且工作正常。但是,如果我在触发器中使用存储过程,则会收到错误1442。

我不想每次我对nba_players进行插入操作时都必须记住要调用该过程,如果可以的话,我想自动执行此任务。

除了使用触发器或存储过程来使用来自其他表的数据更新列之外,还有其他选择。

我一直在研究生成的列,但是它们不允许选择语句。我的意思是,nba_players.pl_ht_inches是表foot_hieght_tb的外键,该表引用total_inches,其中nba_players.pl_ht_feet = feet_hieght_tb.height。我宁愿自己对外键进行更新,而不必手动进行。

任何帮助将不胜感激。干杯。

0 个答案:

没有答案