Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25

Discussione: [mysql]: errno:150

  1. #1

    [mysql]: errno:150

    sto creando un database mysql con tabelle di tipo innodb e mi crea questo errore:

    codice:
    Errore creazione thread: Can't create table '.\navigare\thread.frm' (errno: 150)
    eppure quando creavi la stessa tabella in modalità myisam non mi compariva nessun errore...
    la tabella in questione è la seguente:
    Codice PHP:
    $tabelle ="CREATE TABLE thread (";
        
    $tabelle .="  id_thread          int(10)     NOT NULL auto_increment,";
        
    $tabelle .="  titolo             varchar(70) NOT NULL,";
        
    $tabelle .="  ult_mes_ute      varchar(30) DEFAULT NULL,";
        
    $tabelle .="  ult_mes_dat     datetime default '0000-00-00 00:00:00',";
        
    $tabelle .="  commento           varchar(120) default NULL,";
        
    $tabelle .="  messaggi           int(10) default '0',";
        
    $tabelle .="  discussioni      int(10) default '0',";
        
    $tabelle .="  gruppo                  int(6)  NOT NULL,";
        
    $tabelle .="  PRIMARY KEY(id_thread),";
        
    $tabelle .="  INDEX(ult_mes_ute, gruppo),";
        
    $tabelle .="  FOREIGN KEY(ult_mes_ute) REFERENCES utenti(nickname)";
        
    $tabelle .="  ON DELETE NO ACTION ";
        
    $tabelle .="  ON UPDATE CASCADE, ";
        
    $tabelle .="  FOREIGN KEY(gruppo) REFERENCES gruppi(id_gruppo)";
        
    $tabelle .="  ON DELETE SET NULL";
        
    $tabelle .="  ON UPDATE CASCADE";
        
    $tabelle .=") TYPE=InnoDB ;"
    grazie per la cortese attenzione!
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  2. #2
    il manuale dice :

    codice:
    Cannot create table. If the error message string refers to errno 150, table creation failed because a foreign key constraint was not correctly formed.
    il che vuol dire che una delle due chiavi esterne che ho dichiarato non va bene, ma ho controllato e mi sembra tutto ok...

    le tabelle a cui faccio riferimento sono(le ho create prima di questa tabella con successo):

    Codice PHP:
     $tabelle ="CREATE TABLE utenti (";
        
    $tabelle .="  nickname  varchar(30) NOT NULL, ";
        
    $tabelle .="  password  varchar(30) NOT NULL, ";
        
    $tabelle .="  email     varchar(30) NOT NULL, ";
        
    $tabelle .="  homepage  varchar(30),";
        
    $tabelle .="  firma     varchar(20),";
        
    $tabelle .="  power     int(2) NOT NULL,";
        
    $tabelle .="  citta     varchar(20),";
        
    $tabelle .="  interessi text,";
        
    $tabelle .="  compl     date   default'0000-00-00',";
        
    $tabelle .="  messaggi  int(2) NOT NULL default '1',";
        
    $tabelle .="  remeber   int(2) NOT NULL default '1',";
        
    $tabelle .="  emailv    int(2) NOT NULL,";
        
    $tabelle .="  date     datetime    default '0000-00-00 00:00:00',";
        
    $tabelle .="  PRIMARY KEY(nickname),";
        
    $tabelle .="  INDEX(power), ";
        
    $tabelle .="  FOREIGN KEY(power) REFERENCES powers(id_power)";
        
    $tabelle .="  ON DELETE CASCADE";
        
    $tabelle .="  ON UPDATE CASCADE";
        
    $tabelle .=") TYPE=InnoDB;"
    Codice PHP:
        $tabelle "CREATE TABLE gruppi ( ";
        
    $tabelle .="  id_gruppo int(6) NOT NULL auto_increment,";
        
    $tabelle .="  titolo         varchar(30)NOT NULL ,";
        
    $tabelle .="  PRIMARY KEY  (id_gruppo)";
        
    $tabelle .=") TYPE=InnoDB;"
    non vi sembra pure a voi che non c'è nulla di sbagliato?
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  3. #3
    Potrebbe essere tipi di campi incongruenti nelle foreign key.

    magari un campo SIGNED da una parte e UNSIGNED dall'altra

    prova a togliere una per volta le foreign key e vedi quale delle due ti da il problema.


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

  4. #4
    abbiamo risposto insieme...

    e' una idea peregrina fare una chiave primaria con un nickname....


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

  5. #5
    [supersaibal]Originariamente inviato da piero.mac
    abbiamo risposto insieme...

    e' una idea peregrina fare una chiave primaria con un nickname....

    [/supersaibal]
    cioè che vuoi dire?
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  6. #6
    [supersaibal]Originariamente inviato da Whitecrowsrain
    cioè che vuoi dire? [/supersaibal]
    Niente di piu' e niente di meno di quello che ho detto. Non e' certo l'ideale.


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

  7. #7
    ok ho cambiato ed ho messo una matricola int(6) come chiave per utenti ma stesso errore nella tabella thread...cacchio!
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  8. #8
    [supersaibal]Originariamente inviato da Whitecrowsrain
    ok ho cambiato ed ho messo una matricola int(6) come chiave per utenti ma stesso errore nella tabella thread...cacchio! [/supersaibal]
    I campi numerici che usi come chiavi primarie auto increment dovrebbero essere settate come UNSIGNED.

    Il campo di relazione esterna deve essere dello stesso tipo, poiche' si presume contenga lo stesso tipo di valore.

    Ora puo' essere che una delle due chiavi esterne oppure anche entrambe, causinoo quell'errore. Prova togliendone prima una e poi l'altra per identificare quale non va ed intervenire. Altrimenti e' solo un rimestaggio minestroide dove piu' rivolti meno ci capisci.


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

  9. #9
    ok trovato è
    codice:
    $tabelle .="  FOREIGN KEY(gruppo) REFERENCES gruppi(id_gruppo)";
    $tabelle .="  ON DELETE SET NULL";
    $tabelle .="  ON UPDATE CASCADE";
    che devo fare mo?
    come lo metto unsigned?
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  10. #10
    [supersaibal]Originariamente inviato da Whitecrowsrain
    ok trovato è
    codice:
    $tabelle .="  FOREIGN KEY(gruppo) REFERENCES gruppi(id_gruppo)";
    $tabelle .="  ON DELETE SET NULL";
    $tabelle .="  ON UPDATE CASCADE";
    che devo fare mo?
    come lo metto unsigned? [/supersaibal]
    id_gruppo int(6) UNSIGNED NOT NULL auto_increment

    ma continui a rimestare. Prova a fare come ti ho appena detto. Togli una foreign key per volta e vedi quando non ti da piu' errore. Devi vederlo tu dal tuo pc. quello che posti non da modo di identificarlo.

    Si puo' solo ipotizzare. Isola l'elemento di disturbo.

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

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.