Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [MySQL] Create table con chiave esterna

    Ciao a tutti!
    Mi serve una mano per capire dove stà il problema nella mia query. Devo creare una tabella con una chiave esterna, in modo tale che se l'utente viene cancellato nella tabella "utenti", anche nella tabella "interessi" viene automaticamente cancellato. Ho provato a scrivere così ma non funziona.
    codice:
        CREATE TABLE progetto.interessi (
        Utente VARCHAR( 40 ) NOT NULL references utenti.Nickname on delete cascade,
        Interesse1 VARCHAR( 8 ) NULL DEFAULT NULL ,
        Interesse2 VARCHAR( 8 ) NULL DEFAULT NULL ,
        Interesse3 VARCHAR( 8 ) NULL DEFAULT NULL ,
        Interesse4 VARCHAR( 8 ) NULL DEFAULT NULL ,
        Interesse5 VARCHAR( 8 ) NULL DEFAULT NULL ,
        Interesse6 VARCHAR( 8 ) NULL DEFAULT NULL ,
        Interesse7 VARCHAR( 8 ) NULL DEFAULT NULL ,
        Interesse8 VARCHAR( 8 ) NULL DEFAULT NULL
        ) ENGINE = InnoDB
    Non so se cambia qualcosa ma io uso EasyPHP con la Versione MySQL: 5.1.45-community-log.
    Qualcuno può darmi una mano per favore? Sono disperata

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Occorrerebbe vedere anche il dump della tabella utenti.
    In quest'ultima il campo nickname è definito come chiave?

    Inoltre la sintassi giusta sarebbe

    codice:
        create table interessi (
        Utente varchar(40),
        Interesse1 varchar( 8 ) null default null ,
        Interesse2 varchar( 8 ) null default null ,
        Interesse3 varchar( 8 ) null default null ,
        Interesse4 varchar( 8 ) null default null ,
        Interesse5 varchar( 8 ) null default null ,
        Interesse6 varchar( 8 ) null default null ,
        Interesse7 varchar( 8 ) null default null ,
        Interesse8 varchar( 8 ) null default null,
        foreign key (utente) references utenti(nickname) on delete cascade
        ) engine = innodb
    Comunque sarebbe meglio che usassi un contatore come identificativo dei record anzichè un varchar. Inoltre quella struttura interesse1,....interesseN non mi convince per niente.
    Nella tabella figlia interessi crea un record per ciascun interesse assegnandoli l'id del rispettivo utente.

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    edit. Problemi nel postare ed editare in questo thread

  4. #4
    Originariamente inviato da nicola75ss
    Occorrerebbe vedere anche il dump della tabella utenti.
    In quest'ultima il campo nickname è definito come chiave?

    Inoltre la sintassi giusta sarebbe

    codice:
        create table interessi (
        Utente varchar(40),
        Interesse1 varchar( 8 ) null default null ,
        Interesse2 varchar( 8 ) null default null ,
        Interesse3 varchar( 8 ) null default null ,
        Interesse4 varchar( 8 ) null default null ,
        Interesse5 varchar( 8 ) null default null ,
        Interesse6 varchar( 8 ) null default null ,
        Interesse7 varchar( 8 ) null default null ,
        Interesse8 varchar( 8 ) null default null,
        foreign key (utente) references utenti(nickname) on delete cascade
        ) engine = innodb
    Comunque sarebbe meglio che usassi un contatore come identificativo dei record anzichè un varchar. Inoltre quella struttura interesse1,....interesseN non mi convince per niente.
    Nella tabella figlia interessi crea un record per ciascun interesse assegnandoli l'id del rispettivo utente.
    Grazie per l'aiuto! Allora ho modificato il collegamento con la tabella "utenti" al posto del Nickname ho messo l'ID che è un contatore. Ho provato a a ricrearla come hai detto te però mi viene fuori questo errore quando tenta di salvare gli interessi nella tabella:
    Errore!Cannot add or update a child row: a foreign key constraint fails (`progetto`.`interessi`, CONSTRAINT `interessi_ibfk_1` FOREIGN KEY (`Utente`) REFERENCES `utenti` (`IDutente`) ON DELETE CASCADE)
    Da cosa può dipendere?

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Immagino che nella tabella figlia stia mettendo un valore che non trova corrispondenza nella tabella madre.

  6. #6
    Originariamente inviato da nicola75ss
    Immagino che nella tabella figlia stia mettendo un valore che non trova corrispondenza nella tabella madre.
    Eppure mi sembra di aver scritto correttamente:
    codice:
    create table interessi (     
    Utente int(11) not null,     
    Interesse1 varchar( 8 ) null default null ,     Interesse2 varchar( 8 ) null default null ,     Interesse3 varchar( 8 ) null default null ,     Interesse4 varchar( 8 ) null default null ,     Interesse5 varchar( 8 ) null default null ,     Interesse6 varchar( 8 ) null default null ,     Interesse7 varchar( 8 ) null default null ,     Interesse8 varchar( 8 ) null default null,     
    foreign key (Utente) references utenti(IDutente) on delete cascade     
    ) engine = innodb
    IDutente nella tabella "utenti" è un contatore e chiave primaria....

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Puoi postare anche il dump della tabella utenti?

  8. #8
    Eccolo:
    codice:
    `utenti` (   
    `IDutente` int(11) NOT NULL AUTO_INCREMENT,   
    `Nickname` varchar(40) NOT NULL,   
    `Password` varchar(32) NOT NULL,   
    `Nome` varchar(40) NOT NULL,  
    `Cognome` varchar(40) NOT NULL,   
    `DataNascita` date NOT NULL,   
    `LuogoNascita` varchar(40) NOT NULL,   
    `Indirizzo` varchar(60) DEFAULT NULL,   
    `Email` varchar(40) NOT NULL,   
    `Telefono` varchar(40) DEFAULT NULL,   
    `Admin` tinyint(1) NOT NULL DEFAULT '0',   
    PRIMARY KEY (`IDutente`),   
    UNIQUE KEY `Nickname` (`Nickname`) ) 
    ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;  -- -- Dump dei dati per la tabella `utenti` --

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Mi son

  10. #10
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Mi

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.