"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso atualizar a mesma tabela dentro de um gatilho MySQL?

Como posso atualizar a mesma tabela dentro de um gatilho MySQL?

Publicado em 2024-11-18
Navegar:763

How can I update the same table within a MySQL trigger?

Solução alternativa do gatilho do MySQL para atualizar a mesma tabela

O MySQL restringe inerentemente a atualização de linhas dos gatilhos na mesma tabela à qual estão atribuídos, evitando chamadas recursivas . Apesar dessa limitação, existe uma solução alternativa viável.

Solução alternativa sugerida

Em vez de atualizar diretamente as linhas em um gatilho, aproveite um procedimento armazenado que executa a lógica desejada. Este método separa a tarefa de atualização de linha do gatilho e permite contornar a restrição.

Exemplo

Considere o seguinte cenário:

CREATE TABLE MyTable (
  id INT PRIMARY KEY,
  attribute VARCHAR(255)
);

-- Trigger to insert a row into MyTable for each new parent product record
CREATE TRIGGER my_trigger AFTER INSERT ON Products
FOR EACH ROW
BEGIN
  -- Issue SQL statement to call a stored procedure that performs the insert
  CALL insert_attribute(NEW.id, 'Value');
END;

No exemplo acima, o gatilho my_trigger chama o procedimento armazenado insert_attribute para inserir uma linha em MyTable quando um novo registro é inserido na tabela Products, imitando efetivamente a funcionalidade de uma atualização direta de linha dentro do gatilho.

Considerações adicionais

Embora esta solução alternativa sirva como uma solução funcional, é importante observar que ela difere de um gatilho tradicional em termos de desempenho e capacidade de manutenção. Os procedimentos armazenados podem introduzir sobrecarga e complexidade adicionais ao sistema de banco de dados em comparação com atualizações de gatilho direto.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3