Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    6

    [MySQL] Foreign Key: Codice errore 1005, Errno:150

    Salve
    premetto che sono nuovo sia del forum che nello studio dei DB.

    Allora vorrei creare una tabella Eventi che sia relazionata a sua volta 1:n con CategorieEventi.
    Inoltre ogni evento si verifica in più Edizioni 1:n.
    Quindi pensavo di inserire una chiave esterna in Eventi collegata all'id di Categorie e un'altra che collega Edizioni con l'id dell'evento corrispondente.
    Tradotto in DML:
    codice:
     CREATE TABLE IF NOT EXISTS categorieEventi (
       id int(11) NOT NULL AUTO_INCREMENT,
       nome varchar(30) NOT NULL,
       note text,
       PRIMARY KEY (id) 
     ) ENGINE=InnoDB;
    
     CREATE TABLE IF NOT EXISTS eventi (
       id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
       nome varchar(30) NOT NULL,
       note text,
       id_categoria int(11) NOT NULL,
       FOREIGN KEY (id_categoria) REFERENCES categorieEventi (id)
          ON DELETE SET NULL
          ON UPDATE CASCADE
     ) ENGINE=InnoDB;
    
     CREATE TABLE IF NOT EXISTS edizioni (
        id int(11) NOT NULL AUTO_INCREMENT,
        id_evento int(11) NOT NULL,
        id_referente int(11) NOT NULL,
        nome varchar(30) NOT NULL,
        descrizione text,
        note text,
        luogo varchar(50) NOT NULL,
        dataIn date NOT NULL,
        dataOut date NOT NULL,
        foto varchar(64) NOT NULL,
        PRIMARY KEY (id),
        FOREIGN KEY (id_referente) REFERENCES referenti (id)
           ON DELETE SET NULL
           ON UPDATE CASCADE,
        FOREIGN KEY (id_evento) REFERENCES eventi (id) 
           ON DELETE SET NULL
           ON UPDATE CASCADE
     ) ENGINE=InnoDB;
    ma mi da in esecuzione :
    codice:
    Codice di errore 1005, stato SQL HY000: Can't create table 'my_pizzeriaelfica.eventi' (errno: 150) Linea 21, colonna 1
    
    Codice di errore 1005, stato SQL HY000: Can't create table 'my_pizzeriaelfica.edizioni' (errno: 150) Linea 31, colonna 1
    In tutta sincerità non so che sia, ho capito che è collegato alle chiavi esterne, quindi o sbaglio la sintassi proprio oppure ho fatto una cavolata e non me ne accorgo, altrimenti qualcosa che non so .
    Ringrazio in anticipo chi mi scrivesse.

  2. #2
    Ma devi per forza crearle direttamente con istruzioni SQL? hai mai provato phpmyadmin? scusa se te lo chiedo ma magari non lo conosci visto che sei nuovo di database...
    E' un'applicazione che ti permette di amministrare in modo semplificato i database di MySQL... ha un interfaccia molto intuitiva!

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    6

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    6
    Originariamente inviato da ipermax87
    Ma devi per forza crearle direttamente con istruzioni SQL? hai mai provato phpmyadmin?
    Capisco la tua perplessità...
    Conosco phpmyadmin ma volevo comunque capire dove sbagliassi, perchè creando le stesse tabelle usando anche MySQL Workbench, ottengo risultati diversi.
    Inoltre prima di passare a soluzioni 'facili' vorrei perfezionarmi con un po' di 'gavetta'
    Grazie per la risposta.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    6
    Originariamente inviato da ipermax87
    Ma devi per forza crearle direttamente con istruzioni SQL? hai mai provato phpmyadmin?
    Capisco la tua perplessità...
    Conosco phpmyadmin ma volevo comunque capire dove sbagliassi, perchè creando le stesse tabelle usando anche MySQL Workbench, ottengo risultati diversi.
    Inoltre prima di passare a soluzioni 'facili' vorrei perfezionarmi con un po' di 'gavetta'
    Grazie per la risposta.

  6. #6
    Ho dato una sommaria lettura al codice e mi pare che sia impostato non troppo bene. Intanto richiami una tabella "referenti" che pare non esista e inoltre mi pare che tu voglia con ON DELETE e ON UPDATE modificare la tua stessa tabella.

    Non puoi settare a NULL oppure aggiornare un ID chiave primaria di altra tabella. Oltretutto non avrebbe senso se nella cancellazione di un record in "eventi" venisse posto a NULL la chiave primaria della categoria stessa.

    Caso mai e' che se modifichi o cancelli una categoria devono essere rimossi/modificati gli eventi associati.

    L'azione che richiedi verrebbe esercitata sulla tabella di riferimento. Direi che la foreign key che hai messo in eventi debba essere invece considerata in categorieEventi.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    6
    Originariamente inviato da piero.mac
    Intanto richiami una tabella "referenti" che pare non esista e inoltre mi pare che tu voglia con ON DELETE e ON UPDATE modificare la tua stessa tabella.
    Ok...
    diciamo che: la tabella referenti non l'ho postata perchè mi sembrava superfluo, ma copia-incollando la tabella edizioni, mi sono scordato di cancellarne i riferimenti

    Nella tabella eventi, vorrei che se venisse cancellata una categoria, non venga cancellato anche l'evento, potrei mettere NO ACTION, in modo che il db si rifiuti di cancellare una categoria che ha ancora eventi associati?

    Originariamente inviato da piero.mac
    Non puoi settare a NULL oppure aggiornare un ID chiave primaria di altra tabella. Oltretutto non avrebbe senso se nella cancellazione di un record in "eventi" venisse posto a NULL la chiave primaria della categoria stessa.

    Caso mai e' che se modifichi o cancelli una categoria devono essere rimossi/modificati gli eventi associati.

    L'azione che richiedi verrebbe esercitata sulla tabella di riferimento. Direi che la foreign key che hai messo in eventi debba essere invece considerata in categorieEventi.


    Ma soprattutto, se viene cancellato un evento, non voglio che cancelli anche le edizioni, importantissime per tenere lo storico della pizzeria.

    Forse banalmente basta cancellare le azioni referenziali ON DELETE?

    In ogni caso non posso inserire la chiave esterna in categrieEventi, perche più eventi possono essere della medesima categoria, e non devo creare una categoria per ogni pizzeria

    Mi piacerebbe se mi dessi ulteriori indicazioni
    Grazie per ora

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 © 2025 vBulletin Solutions, Inc. All rights reserved.