Обойти триггеры, которые обновляют ту же таблицу
Я строю таблицу nba_players в MySQL. Имеется столбец для высоты игроков в дюймах (pl_ht_inches). У этого также есть столбец (pl_ht_feet), где он перечисляет рост игроков в футах. Например, nba_player Майкл Джордан имеет 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
этот оператор обновляет файл nba_players.pl_ht_inches, используя таблицу 'foot_hieght_tb', которая имеет два столбца
- высотный varchar(4) с данными типа "6-6", который является имперским измерением
- total_inches int(3), который показывает высоту в дюймах. например, высота "6-6" будет равна total_inches = 78.
Затем я использовал триггер с оператором обновления. Впоследствии я обнаружил, что вы не можете ссылаться на ту же таблицу, что и оператор вставки в триггере для этой таблицы. Триггер гласит следующее:
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 ;
это выдает ошибку 1442, когда я пытаюсь вставить новые данные в nba_players, что означает, что триггер обновляет ту же таблицу, что и вставка в таблицу nba_players.
Затем я попытался запустить обновление, создав хранимую процедуру, в которую я включил тот же оператор обновления, который использовал для триггера. Я могу вызвать процедуру вручную после выполнения вставки в nba_players, и она отлично работает. Но если я использую хранимую процедуру в триггере, я получаю ошибку 1442.
Я не хочу вспоминать о вызове процедуры каждый раз, когда я делаю вставку в nba_players, и хотел бы автоматизировать эту задачу, если бы мог.
Есть ли альтернатива использованию триггеров или хранимых процедур для обновления столбца с использованием данных из другой таблицы.
Я исследовал сгенерированные столбцы, но они не позволяют выбирать операторы. Под этим я подразумеваю, что nba_players.pl_ht_inches является внешним ключом для таблицы foot_hieght_tb, который ссылается на total_inches, где nba_players.pl_ht_feet = foot_hieght_tb.height. Я бы предпочел обновить внешний ключ самостоятельно, а не делать это вручную.
Любая помощь будет принята с благодарностью. Приветствия.