none
Comando Delete não funciona RRS feed

  • Pergunta

  • Boa Noite

    Não sei se posso postar esse tipo de tópico aqui, se não for o local correto me desculpem

    _

    Tenho 4 tabelas no Mysql Paciente, Exame, SerieExame e Resultados

    Paciente esta ligado ao exame que por sua vez posue resultados
    So que os resultados sao divididos em series

    Joao    -> Paciente
            Exame A  -> Exame
                      Exserie1 ->Serie Exame
                              1ok -> Resultado
                              2ok -> Resultado
                              3ok -> Resultado
            Exame B -> Exame
                        Exserie 2 -Serie Exame
                              1nok -> Resultado

    O Problema é se eu fizer um Delete paciente where nome='Joao' ele deleta o Paciente, o Exame, todos os resultados, mas não deleta a serie.

    Será que alguem tem alguma ideia de onde estou errando

    Vou postar a SQL que estou utilizando

    -- --------------------------------------------------------
    -- Servidor:                     127.0.0.1
    -- Versão do servidor:           5.6.25-log - MySQL Community Server (GPL)
    -- OS do Servidor:               Win64
    -- HeidiSQL Versão:              9.2.0.4947
    -- --------------------------------------------------------
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET NAMES utf8mb4 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    
    -- Copiando estrutura do banco de dados para hospital
    DROP DATABASE IF EXISTS `hospital`;
    CREATE DATABASE IF NOT EXISTS `hospital` /*!40100 DEFAULT CHARACTER SET utf8 */;
    USE `hospital`;
    
    
    -- Copiando estrutura para tabela hospital.exame
    DROP TABLE IF EXISTS `exame`;
    CREATE TABLE IF NOT EXISTS `exame` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `idpaciente` int(11) NOT NULL DEFAULT '0',
      `feito` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `idpaciente` (`idpaciente`),
      CONSTRAINT `FK__paciente` FOREIGN KEY (`idpaciente`) REFERENCES `paciente` (`id`) ON DELETE CASCADE
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    
    -- Copiando dados para a tabela hospital.exame: ~0 rows (aproximadamente)
    DELETE FROM `exame`;
    /*!40000 ALTER TABLE `exame` DISABLE KEYS */;
    INSERT INTO `exame` (`id`, `idpaciente`, `feito`) VALUES
    	(1, 1, 'AAA'),
    	(2, 2, 'BBB');
    /*!40000 ALTER TABLE `exame` ENABLE KEYS */;
    
    
    -- Copiando estrutura para tabela hospital.exameserie
    DROP TABLE IF EXISTS `exameserie`;
    CREATE TABLE IF NOT EXISTS `exameserie` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `nomeserie` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
    
    -- Copiando dados para a tabela hospital.exameserie: ~3 rows (aproximadamente)
    DELETE FROM `exameserie`;
    /*!40000 ALTER TABLE `exameserie` DISABLE KEYS */;
    INSERT INTO `exameserie` (`id`, `nomeserie`) VALUES
    	(1, 'serie s1'),
    	(2, 'series2'),
    	(3, 'serie s1a');
    /*!40000 ALTER TABLE `exameserie` ENABLE KEYS */;
    
    
    -- Copiando estrutura para tabela hospital.paciente
    DROP TABLE IF EXISTS `paciente`;
    CREATE TABLE IF NOT EXISTS `paciente` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `nome` varchar(50) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    
    -- Copiando dados para a tabela hospital.paciente: ~2 rows (aproximadamente)
    DELETE FROM `paciente`;
    /*!40000 ALTER TABLE `paciente` DISABLE KEYS */;
    INSERT INTO `paciente` (`id`, `nome`) VALUES
    	(1, 'junior'),
    	(2, 'marcos');
    /*!40000 ALTER TABLE `paciente` ENABLE KEYS */;
    
    
    -- Copiando estrutura para tabela hospital.resultado
    DROP TABLE IF EXISTS `resultado`;
    CREATE TABLE IF NOT EXISTS `resultado` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `idexame` int(11) NOT NULL DEFAULT '0',
      `idserie` int(11) NOT NULL DEFAULT '0',
      `result` text,
      PRIMARY KEY (`id`),
      KEY `FK_resultado_exame` (`idexame`),
      KEY `FK_resultado_exameserie` (`idserie`),
      CONSTRAINT `FK_resultado_exame` FOREIGN KEY (`idexame`) REFERENCES `exame` (`id`) ON DELETE CASCADE,
      CONSTRAINT `FK_resultado_exameserie` FOREIGN KEY (`idserie`) REFERENCES `exameserie` (`id`) ON DELETE CASCADE
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
    
    -- Copiando dados para a tabela hospital.resultado: ~0 rows (aproximadamente)
    DELETE FROM `resultado`;
    /*!40000 ALTER TABLE `resultado` DISABLE KEYS */;
    INSERT INTO `resultado` (`id`, `idexame`, `idserie`, `result`) VALUES
    	(1, 1, 1, 'OK'),
    	(2, 1, 3, 'OK'),
    	(3, 1, 2, 'OK');
    /*!40000 ALTER TABLE `resultado` ENABLE KEYS */;
    /*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
    /*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;


    • Editado jjunior.net segunda-feira, 6 de julho de 2015 00:41
    segunda-feira, 6 de julho de 2015 00:40

Respostas

  • Junior...

    você não utilizou FKs na tabela hospital.exameserie, por isso ela não possui referência a nenhuma das outras tabelas... assim o on cascade não funciona.


    Natan

    • Marcado como Resposta Marcos SJ sexta-feira, 10 de julho de 2015 12:20
    quarta-feira, 8 de julho de 2015 10:57

Todas as Respostas