Я строю таблицу 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<br>
after insert on nba_players
for each row
begin
update nba_players ab<br>
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. Я бы предпочел обновить внешний ключ самостоятельно, а не делать это вручную.
Любая помощь будет принята с благодарностью. Приветствия.