Ir para conteúdo
Fórum Script Brasil
  • 0

Criar trigger MySql


cleber_mav

Pergunta

Pessoal preciso criar uma trigger que copie os dados da tabela services para a tabela history_services quando quando houver um insert ou um delete.

Exemplo:

Tabela services

CREATE TABLE services

(

id SMALLINT NOT NULL AUTO_INCREMENT,

name VARCHAR(30) NOT NULL,

request_date DATETIME NOT NULL,

value DECIMAL(10,2) NOT NULL,

PRIMARY KEY(id)

)engine=InnoDB;

Tabela history_services

CREATE TABLE services

(

id SMALLINT NOT NULL AUTO_INCREMENT,

name VARCHAR(30) NOT NULL,

request_date DATETIME NOT NULL,

cancellation_date DATETIME NOT NULL,

value DECIMAL(10,2) NOT NULL,

status VARCHAR(15) NOT NULL,

PRIMARY KEY(id)

)engine=InnoDB;

Como pode-se observar as tabelas são praticamente iguais, o que as diferencia é que a tabela history_services tem os campos cancellation_date obviamente corresponde a data de cancelamento do serviço e o status de define se o serviço esta ativo ou cancelado.

Desta forma eu gostaria de criar uma trigger que:

- Quando houver um insert na tabela services ela copie os dados da linha em questão para history_service e atualize o status para ATIVO

- Quando houver um delete na tabela services ela copie os dados da linha em questão para history_service e atualize o estatus para INATIVO e atualize o campo cancellation_date com a date e hora atual.

Pessoal eu tentei alguns exemplos, mas estou meio enforcado em tempo e prazo então estou pedindo ajuda aqui, mesmo sabendo que o certo seria eu me aprofundar mais no assunto..

Desde já agradeço à ajuda de vocês..

Vlw!!

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Eu acho que o melhor seria que a tabela history_services tivesse apenas os campos service_id, status, status_date com chave estrangeira no campo service_id apontando para o campo id da tabela services e com chave primária composta de service_id e status_date.

Quanto ao trigger mostre o que você já tentou.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'cleber_mav'

Insira um atributo na tabela history_services.

Eu criei o atributo idServices que representará o id da tabela services quando da gravação dos dados para que você possa saber o histórico de cada registro de services.

O trigger de inclusão é assim:

DELIMITER $$;

DROP TRIGGER `test`.`Services_before_insert`$$

CREATE TRIGGER `test`.`Services_before_insert` BEFORE INSERT on `test`.`services`
FOR EACH ROW BEGIN
   insert into history_services(`idservices`, `name`, `request_date`, `value`, `status`)
   values(new.id, new.name, new.request_date, new.value, 'ATIVO');
END$$

DELIMITER;$$
E o trigger de exclusão é assim:
DELIMITER $$;

DROP TRIGGER `test`.`Services_before_delete`$$

CREATE TRIGGER `test`.`Services_before_delete` BEFORE DELETE on `test`.`services`
FOR EACH ROW BEGIN
   insert into history_services(`idservices`, `name`, `request_date`, cancellation_date, `value`, `status`)
   values(old.id, old.name, old.request_date, NOW, old.value, 'INATIVO');
END$$

DELIMITER;$$

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...