Jump to content
Fórum Script Brasil
  • 0

Criar trigger MySql


cleber_mav

Question

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 to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...