Este é um post disponível para assinantes MVPVideo: Curso Completo MySQL(básico)–Parte XII-Como criar uma trigger para gerar o próximo valor para chave primária
Nesta vídeo o autor explica o que é, para que serve e como utilizar este poderoso recurso disponível também no MySql.
Título:
Tempo: 17m20s
Mini resumo: Nesta vídeo aula o autor da continuidade a série sobre MySql falando sobre Triggers. Em sua última video aula o autor tratou de um assunto por vezes desconhecido por parte de quem trabalha com MySql que é o uso de procedure, com triggers a história não é muito diferente. Poucos programadores e usuários iniciantes de MySql lançam mão deste recurso. Triggers são procedimentes armazenados no servidor que são disparados mediante um evento específico que ocorre em uma tabela. Nesta vídeo o autor explica o que é, para que serve e como utilizar este poderoso recurso disponível também no MySql. Veja como criar uma trigger para gerar o próximo valor para chave primária de uma tabela no banco de dados.
Tecnologias utilizadas: MySql.
Exemplos construídos: Criação Trigger para gerar Primary Key.
Palavras chave: MySql, Triggers, Primary Key.

6 COMENTÁRIOS
Eu tive o mesmo problema que você Rodrigo, gerei a trigger, porém ao tentar inserir um registro ela não é executada.
Já reiniciei meu pc, servidor mysql, verifiquei se a trigger existe na tabela de triggers do mysql e mesmo assim ela não é executada.
segue código de criação da trigger:
DROP TRIGGER `CUSTOMER_BI`;
CREATE DEFINER=`root`@`localhost` TRIGGER `CUSTOMER_BI` BEFORE INSERT ON `customer` FOR EACH ROW
BEGIN
DECLARE ID INT;
SELECT NewCust FROM nextcust INTO ID;
UPDATE nextcust SET NewCust = NewCust + 1;
SET NEW.CustNo = ID;
END;
se puder meu ajudar ou indicar um local onde eu possa obter ajuda ficarei grato.
att,
insert into customer (company)
values ('xxxxxxxxxxxx');
/* SQL Error (1364): Field 'CustNo' doesn't have a default value */
Olha só, você esta fazendo um insert em uma tabela que precisa de uma chave primária certo?
Você usou
[CODE] insert into customer (company) values ('xxxxxxxxxxxx'); [/CODE]
Porém isso irá funcionar se o teu campo CustNo for do tipo auto-incremento, senão for ele vai dar exatamente este erro: "/* SQL Error (1364): Field 'CustNo' doesn't have a default value */"... Ele esta dizendo o seguinte, Leandro eu preciso de um valor padrão para o campo CustNo
Seu código então deveria ser assim, se você não usar o auto-incremento:
[CODE] insert into customer (CustNo,company) values (99,'xxxxxxxxxxxx'); [/CODE]
Veja se ficou claro, e veja se é isso mesmo que esta acontecendo com você.
Um abraço.
Eu achava que essa trigger por ser executada no before insert seria executada antes de efetuar o insert, ou seja, meu campo chave não precisaria estar preenchido na minha instrução insert, pois, a trigger se encarregaria de preenche-lo.
Mas como você bem explicou, eu devo passar um valor qualquer no insert para evitar o erro de not null(pk), em seguida esse campo será atualizado pela minha trigger.
Resumindo, o problema era exatamente este e sua explicação tirou minha dúvida.
Obrigado mais uma vez.
abs
Conte sempre conosco!
Um abraço
Curso(s):
Space do autor

download

1
0
