huerta 0 Denunciar post Postado Junho 17, 2010 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
Motta 645 Denunciar post Postado Junho 17, 2010 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