Fr4nc0w 1 Denunciar post Postado Janeiro 2, 2010 Dae galera beleza? Feliz 2010 a todos. Eu tenho um caso de referência recursiva, porém retirei a referência recursiva, pois vi que o MYSQL não se comportou muito bem com ela, mas preciso impedir o delete de um registro caso ele possua referência. Devido a isso resolvi fazer um trigger que ao tentar deletar uma categoria, verifique se existe uma categoria filha, e se possuir impedir o delete, pois se essa categoria possuir outros itens, ela já é impedida de ser deletada. Obs:"Caso tenham solucao pra referencia recursiva em MYSQL, também aceito." A tabela: (Onde categoria Mãe é o id de uma outra categoria.) CREATE TABLE IF NOT EXISTS `categoria` ( `id_categoria` int(11) NOT NULL AUTO_INCREMENT, `titulo` varchar(80) NOT NULL, `ativa` varchar(255) DEFAULT 'N', `ordem` int(5) NOT NULL DEFAULT '0', `descricao` varchar(500) DEFAULT NULL, `categoriamae` int(11) DEFAULT '0', PRIMARY KEY (`id_categoria`), KEY `fk_pessoa_categoria` (`id_pessoa`), KEY `FK_CATEGORIA_CATEGORIAMAE` (`categoriamae`) ) Eu tentei, porém me confundi, se uso OLD para verificar o ID. Também me perdi ao impedir o delete, eu devo fazer oq? return false?, pois nao tenho menor ideia do q fazer em relacao a isso. O teste seria: "select count(id_categoria) into contagem from categoria where categoriamae = old.id_categoria"; Estou certo? fiz um teste: DELIMITER | CREATE TRIGGER impedeDeleteCateg BEFORE DELETE ON categoria FOR EACH ROW BEGIN select count(id_categoria) INTO contagem from categoria where categoriamae = OLD.id_categoria IF @contagem > 0 THEN return false; END IF; return true; END; | DELIMITER ; porém travou meu MYSQL antes mesmo de inserir. vlww e flww caso tenham solucao pra referencia recursiva em MYSQL, também aceito. Compartilhar este post Link para o post Compartilhar em outros sites
Wagner Bianchi 0 Denunciar post Postado Janeiro 8, 2010 Retira o return false que foi ele que provocou o erro e não sei te falar porque, mas ele já ferrou alguns procedimentos que desenvolvi há algum tempo. No lugar dele, você vai programar a recuperação do maior ID da tabela que teria o registro excluído e somará 1000 a este valor. Tendo este valor, atribua o mesmo ao OLD.ID, o que provocará a exclusão de um registro que não existe, ou seja, não excluirá nenhum registro; lógico, isso deverá estar dentro de uma estrutura condicional IF THEN ELSE. Estou impossibilitado no momento de lhe fornecer um exemplo, mas acho que está bem claro. Qualquer dúvida, continue o post. Happy MySQL'ing!! Compartilhar este post Link para o post Compartilhar em outros sites