Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Henrique Barcelos

Triggers

Recommended Posts

Bom dia, senhores.

Estou iniciando meu estudo sobre triggers SQL e tendo um pouco de dificuldades com a sintaxe.

 

DELIMITER $$
CREATE DEFINER=CURRENT_USER TRIGGER resolve_services_pos AFTER INSERT ON services
FOR EACH ROW
BEGIN

END$$
DELIMITER ;

 

Preciso de algumas explicações:

FOR EACH ROW percorre todas as linhas existentes na tabela ou percorre apenas as linhas atualmente sendo inseridas?

 

O que eu preciso fazer:

Tenho uma tabela de listagem de serviços oferecidos por uma empresa. Ao invés de listar por ordem alfabética ou algo do tipo, o cliente quer poder ordenar "do jeito dele".

A princípio, criei uma coluna extra chamada `position` na tabela. A minha ideia é que ela se auto-incrementasse a cada inserção, mas, infelizmente obtenho este erro quando tento defini-la:

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

 

Como eu faria para criar um auto-incremento com triggers?

E o problema maior: ao atualizar a tabela, como eu mantenho as posições sequenciais?

O evento de disparo do trigger nesse último caso deve ocorrer antes ou depois do UPDATE?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites
o cliente quer poder ordenar "do jeito dele".

 

Ele informa a sequencia então.

 

Mas, uma AUTO_INCREMENT não resolveria ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, Motta, no MySQL, auto increment só pode ser definido em chaves primárias, mas esse campo position a princípio não é uma.

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

 

Se eu colocasse como chave, resolveria o problema da inserção, mas da atualização não =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que o MySql não tem um objeto SEQUENCE (gera um número sequencial), achei uma implementação para isto aqui.

 

Na trigger de insert bastaria alimentar o valor desta tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.