Обойти триггеры, которые обновляют ту же таблицу

Я строю таблицу 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', которая имеет два столбца

  1. высотный varchar(4) с данными типа "6-6", который является имперским измерением
  2. 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. Я бы предпочел обновить внешний ключ самостоятельно, а не делать это вручную.

Любая помощь будет принята с благодарностью. Приветствия.

0 ответов

Другие вопросы по тегам