Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    3

    Problema Foreign key mysql

    Buona sera a tutti , vi spiego il mio problema ho creato un semplicissimo Db con mysql workbench e , l'ho caricato sul mio server mysql ( uso xampp per semplicità) ora il discorso funziona bene fino a che non cerco di cancellare un record da persona , mi dice : "#1701 - Cannot truncate a table referenced in a foreign key constraint (`mydb`.`email`, CONSTRAINT `fk_email_persone1` FOREIGN KEY (`persone_idpersona`) REFERENCES `mydb`.`persone` (`idpersona`))" ora , so che il messaggio di errore è riferito al comando truncate , ma se provo ad eliminare un record dalla suddetta tabella con il comando delete semplicemente non lo elimina lo ignora.
    nelle tabelle restanti invece il delete e insert funzionano come devono.
    nel link sotto allego uno screenshot di come ho fatto il Db.
    http://img189.imageshack.us/img189/6179/immagineems.jpg

  2. #2
    Ciao,
    ci puoi postare gli script delle tre tabelle??
    In genere bisogna cancellare in cascata i record iniziando dalle tabelle che referenziano e successivamente dalle tabelle referenziate

    ciao
    Mik

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    3
    ecco lo script che genera il programma:


    mi ero scordato di dire che sto cercando di creare una rubrica :P e sto cercando di imparare mysql.

    codice:
    SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
    
    SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
    
    SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
    
    
    
    CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
    
    
    
    USE `mydb`;
    
    
    
    CREATE  TABLE IF NOT EXISTS `mydb`.`persone` (
    
      `idpersona` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
    
      `nome` VARCHAR(45) NOT NULL ,
    
      `cognome` VARCHAR(45) NOT NULL ,
    
      `indirizzo` VARCHAR(45) NULL DEFAULT NULL ,
    
      UNIQUE INDEX `idpersona_UNIQUE` (`idpersona` ASC) ,
    
      PRIMARY KEY (`idpersona`) )
    
    ENGINE = InnoDB
    
    DEFAULT CHARACTER SET = latin1
    
    COLLATE = latin1_swedish_ci;
    
    
    
    CREATE  TABLE IF NOT EXISTS `mydb`.`email` (
    
      `persone_idpersona` INT(10) UNSIGNED NULL DEFAULT NULL ,
    
      `email` VARCHAR(45) NULL DEFAULT NULL ,
    
      INDEX `fk_email_persone1_idx` (`persone_idpersona` ASC) ,
    
      UNIQUE INDEX `email_UNIQUE` (`email` ASC) ,
    
      CONSTRAINT `fk_email_persone1`
    
        FOREIGN KEY (`persone_idpersona` )
    
        REFERENCES `mydb`.`persone` (`idpersona` )
    
        ON DELETE CASCADE
    
        ON UPDATE CASCADE)
    
    ENGINE = InnoDB
    
    DEFAULT CHARACTER SET = latin1
    
    COLLATE = latin1_swedish_ci;
    
    
    
    CREATE  TABLE IF NOT EXISTS `mydb`.`telefoni` (
    
      `persone_idpersona` INT(10) UNSIGNED NULL DEFAULT NULL ,
    
      `telefono` VARCHAR(45) NULL DEFAULT NULL ,
    
      INDEX `fk_telefoni_persone1_idx` (`persone_idpersona` ASC) ,
    
      UNIQUE INDEX `telefono_UNIQUE` (`telefono` ASC) ,
    
      CONSTRAINT `fk_telefoni_persone1`
    
        FOREIGN KEY (`persone_idpersona` )
    
        REFERENCES `mydb`.`persone` (`idpersona` )
    
        ON DELETE CASCADE
    
        ON UPDATE CASCADE)
    
    ENGINE = InnoDB
    
    DEFAULT CHARACTER SET = latin1
    
    COLLATE = latin1_swedish_ci;
    
    
    
    
    
    SET SQL_MODE=@OLD_SQL_MODE;
    
    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
    
    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

  4. #4
    Ciao guardando il codice nella definizione delle tabelle il tutto sembra corretto perche' nelle foreign key hai messo la clausola ON DELETE CASCADE il che dovrebbe consertirti di eliminare effettivamente un elemento di persona senza avere problemi di referenziabilita'.

    Una prova che potresti fare per cercare di focalizzare il problema potrebbe essere, supponiamo tu voglia eliminare la persona X elimina tutte le occorrenze di questa persona X in EMAIL ed in TELEFONI poi prova ad eliminare la persona X Se anche cosi ti da problemi possiamo pensare ad altri tipi di errore.

    Facci sapere

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.