Ir para conteúdo

POWERED BY:

Arquivado

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

huerta

Conflito auto_increment com tigger

Recommended Posts

Sr(s),

Alguem saberia como criar uma tigger semelhante a esta que possa pegar

o valor do próximo AUTO_INCREMENT da tabela.

O problema esta que esta tabela 'prontuario' pode ter a linha deletada e com isso

eu não posso usar o MAX(CodProntuario)+1.

Muito obrigado.

 

DROP TRIGGER IF EXISTS `trigger_prontuario`;

CREATE TRIGGER `trigger_prontuario` AFTER INSERT ON `trabalhador`

FOR EACH ROW INSERT INTO prontuario SET

CodTrabalhador = NEW.id,

CodNumerico = (SELECT MAX(CodProntuario)+1 FROM prontuario ), /*AQUI ESTA O PROBLEMA*/

DataProtuario = CURRENT_DATE()

;

 

 

 

DROP TABLE IF EXISTS `trabalhador`;

CREATE TABLE `trabalhador` (

`id` int(8) NOT NULL auto_increment,

`cpf` bigint(11) unsigned zerofill NOT NULL,

`nome` varchar(60) NOT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `cpf` (`cpf`),

KEY `id` (`id`,`nome`)

) ENGINE=InnoDB AUTO_INCREMENT=38809 DEFAULT CHARSET=latin1;

 

 

 

DROP TABLE IF EXISTS `prontuario`;

CREATE TABLE `prontuario` (

`CodProntuario` bigint(20) unsigned NOT NULL auto_increment,

`CodTrabalhador` bigint(20) unsigned NOT NULL,

`CodNumerico` bigint(20) unsigned default NULL,

`DataProtuario` date default NULL,

PRIMARY KEY (`CodProntuario`),

KEY `PRONTUARIO_FKIndex1` (`CodTrabalhador`)

) ENGINE=InnoDB AUTO_INCREMENT=52033 DEFAULT CHARSET=latin1;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se a PK não precisa ter integridade dentro da sequencia, ou seja pode ter banguelas a melhor solução é uma trigger com uma sequence (não sei se MySql não tem incremento automático como o Oracle).

 

Sendo necessária a integridade alguns cuidados devem ser tomados :

 

-Não permitir o delete (uma trigger pode fazer isto), deve haver uma cancelamento ou algo assim.

-O BD não deve permitir a DIRTY READ (leitura de um registro por outra sessão quando esta não está finalizada).

-Uso de transactions (também não sei se são suportadas), pois garante que um registro finalizado é valido.

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.