Fórum Trigger no mysql duvida? #30961
04/01/2007
0
Pessoal eu sei que o mysql tem o campo auto_increment só que ele não funciona como eu gostaria, por exemplo:
se eu tiver o id 1,2,3,4 e o usuario apagar o registro 3,4 o proximo id que ele gera é 5 e não o 3.
Então eu gostaria de fazer uma trigger tipo essa no firebird só que não estou conseguindo se alguem puder me dar uma maozinha eu agradeço
[color=green:292c067859]
CREATE TRIGGER INS_ID_EMPRESA FOR EMPRESA ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE SEQ INTEGER;
BEGIN
SELECT MAX(ID) FROM EMPRESA INTO :SEQ
IF(SEQ = NULL)THEN
NEW.ID =1;
ELSE
NEW.ID= NEW.ID + 1;
END;
[/color:292c067859]
se eu tiver o id 1,2,3,4 e o usuario apagar o registro 3,4 o proximo id que ele gera é 5 e não o 3.
Então eu gostaria de fazer uma trigger tipo essa no firebird só que não estou conseguindo se alguem puder me dar uma maozinha eu agradeço
[color=green:292c067859]
CREATE TRIGGER INS_ID_EMPRESA FOR EMPRESA ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE SEQ INTEGER;
BEGIN
SELECT MAX(ID) FROM EMPRESA INTO :SEQ
IF(SEQ = NULL)THEN
NEW.ID =1;
ELSE
NEW.ID= NEW.ID + 1;
END;
[/color:292c067859]
Leonardobhbr
Curtir tópico
+ 0
Responder
Posts
06/01/2007
Raserafim
leonardo, vc deve ter cuidado com esta forma que vc pretende fazer. deve conhecer bem as implicações que isto pode acarretar.
muito embora os buracos na numeração possam parecer ilógicos, mas ocupar estes espaços não é uma medida segura. a razão para isso é a integridade.
imagine que vc tinha uma ordem de serviço cadastrado e o cliente tem um papel impresso desta ordem com o seu código. se vc apaga este registro e depois cria um outro e este mesmo número fosse ocupado, este outro cliente teria o mesmo código da ordem de serviço do outro cliente.
agora imagina uma outra situação. vc cadastraria um cliente e seus telefones. depois vc apaga este cliente e vc não tinha feito o relacionamento para a exclusão dos dados em cascata. depois quando vc cadastrar um outro cliente ele assumirá os telefones do cliente antigo.
ou seja, autonumeração tem que garantir uma numeração única para cada registro.
muito embora os buracos na numeração possam parecer ilógicos, mas ocupar estes espaços não é uma medida segura. a razão para isso é a integridade.
imagine que vc tinha uma ordem de serviço cadastrado e o cliente tem um papel impresso desta ordem com o seu código. se vc apaga este registro e depois cria um outro e este mesmo número fosse ocupado, este outro cliente teria o mesmo código da ordem de serviço do outro cliente.
agora imagina uma outra situação. vc cadastraria um cliente e seus telefones. depois vc apaga este cliente e vc não tinha feito o relacionamento para a exclusão dos dados em cascata. depois quando vc cadastrar um outro cliente ele assumirá os telefones do cliente antigo.
ou seja, autonumeração tem que garantir uma numeração única para cada registro.
Responder
Gostei + 0
06/01/2007
Raserafim
neste tópico, tive uma boa discursão com um colega que, assim como vc, tb não gosta muito destes buracos que fica na auto-numeração.
dá uma olhada:
[url]http://forum.clubedelphi.net/viewtopic.php?t=82990&highlight=[/url]
dá uma olhada:
[url]http://forum.clubedelphi.net/viewtopic.php?t=82990&highlight=[/url]
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)