Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    [MySQL]

    Ciao a tutti.

    Ho notato una cosa piuttosto spiacevole di MySQL. Io possiedo attualmente la versione 5 (che è una alpha), ma questo problema l'ho riscontrato un po' con tutte le versioni dalla 3 in avanti.

    Ecco il problema: MySQL ignora completamente il vincolo di chiave esterna! Qualcuno sa se questo è un bug non ancora corretto o qualcos'altro?

    Questo è un semplice esempio di creazione di due tabelle:
    codice:
    CREATE TABLE t1(
       id INT NOT NULL,
       dsc VARCHAR(30),
       PRIMARY KEY(id)
    );
    
    CREATE TABLE t2(
       id2 INT NOT NULL,
       idfk INT NOT NULL,
       PRIMARY KEY(id2),
       FOREIGN KEY(idfk) REFERENCES t1(id)
    );
    Inserisco dei dati:
    codice:
    INSERT INTO t1 VALUES('0', 'Ciao');
    INSERT INTO t1 VALUES('1', 'Hello');
    Ed il brutto è che mi lascia anche inserire questa tupla:
    codice:
    INSERT INTO t2 VALUES('0', '7');
    Cosa che a me non stà bene: ho definito un vincolo di chiave esterna, vorrei che, come avviene per la chiave primaria, non mi lasciasse inserire la tupla, dato che non esiste nessuna tupla in t1 con chiave 7.

    Non lo trovate perlomeno strano, che non siano stati fatti questi controlli?

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  2. #2
    per quanto ne so il vincolo di chiave esterna è supportato dal gestore INNODB. Prova a creare tabelle INNODB.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    E come si creano delle tabelle InnoDB? Ho provato a seguire la documentazione e fare quanto segue:
    codice:
    CREATE TABLE t1(
       id int not null,
       dsc varchar(20),
       PRIMARY KEY(id)
    ) TYPE=InnoDB;
    
    CREATE TABLE t2(
       id1 int not null,
       idf int not null,
       PRIMARY KEY(id1),
       FOREIGN KEY(idf) REFERENCES t1(id)
    ) TYPE=InnoDB;
    All'esecuzione della prima tabella ottengo 1 warning (che warning? Boh... dove si va a vedere?)
    All'esecuzione della seconda tabella ottengo il seguente errore:

    ERROR 1005 (HY000) Can't create table '.\nomedb\t2.frm' (errno: 150)

    Che significa?

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    per creare le tabelle INNODB devi scaricare la versione MAX di mysql

    http://www.mysql.com/products/mysql/

    http://dev.mysql.com/downloads/mysql/4.0.html

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Credo di averla già la versione MAX: il servizio attivo, infatti, è mysqld-max-nt...

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.