Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    InnoDB e MYISAM, problema ...

    Premetto che sono un assoluto principiante ma fino a poco tempo fà ero un uomo felice ...
    Ho una struttura del database creata in questo modo

    <SQL>
    CREATE TABLE listini (
    id_listini INTEGER(11) UNSIGNED NOT NULL,
    annomese INTEGER(6) UNSIGNED NOT NULL,
    titololistino VARCHAR(150) NOT NULL,
    PRIMARY KEY(id_listini)
    ) ENGINE=InnoDB DEFAULT CHARACTER SET=latin1"

    CREATE TABLE categorie (
    id_categorie INTEGER(11) UNSIGNED NOT NULL,
    nomecategoria VARCHAR(80) NOT NULL,
    PRIMARY KEY(id_categorie)
    ) ENGINE=InnoDB DEFAULT CHARACTER SET=latin1

    CREATE TABLE offerte (
    id_offerte INTEGER(11) UNSIGNED NOT NULL,
    listini_id_listini INTEGER(11) UNSIGNED NOT NULL,
    titoloofferta VARCHAR(80) NOT NULL,
    descofferta TEXT NOT NULL,
    prezzoofferta DECIMAL(6,2) NOT NULL,
    PRIMARY KEY(id_offerte, listini_id_listini),
    INDEX offerte_FKIndex1(listini_id_listini),
    FOREIGN KEY(listini_id_listini)
    REFERENCES listini(id_listini)
    ON DELETE CASCADE
    ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARACTER SET=latin1

    CREATE TABLE oggetti (
    id_oggetti INTEGER(11) UNSIGNED NOT NULL,
    categorie_id_categorie INTEGER(11) UNSIGNED NOT NULL,
    listini_id_listini INTEGER(11) UNSIGNED NOT NULL,
    nomeoggetto VARCHAR(200) NOT NULL,
    prezzooggetto DECIMAL(6,2) NOT NULL,
    PRIMARY KEY(id_oggetti, categorie_id_categorie, listini_id_listini),
    INDEX oggetti_FKIndex1(listini_id_listini),
    INDEX oggetti_FKIndex2(categorie_id_categorie),
    FOREIGN KEY(listini_id_listini)
    REFERENCES listini(id_listini)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
    FOREIGN KEY(categorie_id_categorie)
    REFERENCES categorie(id_categorie)
    ON DELETE CASCADE
    ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARACTER SET=latin1

    CREATE TABLE variazioni (
    id_variazioni INTEGER(11) UNSIGNED NOT NULL,
    offerte_id_offerte INTEGER(11) UNSIGNED NOT NULL,
    offerte_listini_id_listini INTEGER(11) UNSIGNED NOT NULL,
    descvariazione VARCHAR(200) NOT NULL,
    prezzovariazione DECIMAL(6,2) NOT NULL,
    PRIMARY KEY(id_variazioni, offerte_id_offerte, offerte_listini_id_listini),
    INDEX variazioni_FKIndex1(offerte_id_offerte, offerte_listini_id_listini),
    FOREIGN KEY(offerte_id_offerte, offerte_listini_id_listini)
    REFERENCES offerte(id_offerte, listini_id_listini)
    ON DELETE CASCADE
    ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARACTER SET=latin1

    </SQL>

    Il mio obbiettivo era che se l'utente mi cancellava un listino con ID 1 la cancellazione dello stesso mi si riperquoteva automaticamente in tutte le altre tabelle e durante operazioni di modifica e editing vari avevo usato anche le transaction. Fino a qui tutto a posto e in locale funzionava alla grande tutto.
    Poi ho deciso che volevo provarlo online ..... ovviamente volevo provare con qualche sito hosting free ma con mia sorpresa ho visto che passandogli l'SQL le tabelle venivano correttamente create .... ma non in INNODB. Ora secondo voi come posso convertire una struttura INNODB in MYISAM e è possibile che debba farlo ???? Grazie per l'aiuto ne ho davvero bisogno ....

  2. #2
    mi dispiace dirti che mi sà che dovrai rinunciare

  3. #3
    Cioè mi vuoi dire che non è possibile convertire una tabella progettata con InnoDB in Myisam ? Questo mi demoralizza oltre modo, sopratutto considerando che sono agli inizi ...

  4. #4
    In sostanza da quello che ho letto INNODB viene adottato di default come database sul mysql5 e differisce dall'altro formato per il supporto delle transazioni, ma ho un dubbio
    Nelle dichiarazioni che ho fatto sopra, ci sono queste voci
    ...
    INDEX offerte_FKIndex1(listini_id_listini),
    FOREIGN KEY(listini_id_listini)
    REFERENCES listini(id_listini)
    ON DELETE CASCADE
    ON UPDATE CASCADE
    ...

    Suppongo che esse non abbiano più senso se usate con MYISAM, e quindi mentre prima con INNODB se cancellavo un listino dal database in automatico si cancellavano tutti i record con la sua chiave, ora devo fare 4 query separate per fare la stessa operazione, giusto ? A proposito c'è un modo per non farne 4 ma farne solo 1 ?

    $query = "DELETE FROM listini WHERE id_listini = $idlistino";
    if (!mysql_query($query)) die (sql_error());
    $query = "DELETE FROM offerte WHERE listini_id_listini = $idlistino";
    if (!mysql_query($query)) die (sql_error());
    $query = "DELETE FROM oggetti WHERE listini_id_listini = $idlistino";
    if (!mysql_query($query)) die (sql_error());
    $query = "DELETE FROM variazioni WHERE offerte_listini_id_listini = $idlistino";
    if (!mysql_query($query)) die (sql_error());

    Grazie per la pazienza ma sto cercando l'illuminazione perchè sono piuttosto sgomentato

  5. #5
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    ti suggerisco di documentarti meglio anche aiutandoti con la WIKIPEDIA , la MyISAM e la INNOdb hanno differenze sia pratiche che concettuali , lock di tabelle e record in primis , e poi non ce lo vedo un database INNODB orientato ai servizi WEB , a meno che tu non abbia esigenze particolarissime ed un server di tutto rispetto .

    PS
    il 99% delle hosting-house mettono a disposizione solo tabelle MyISAM che io sappia

  6. #6
    E dallo schema che ho postato sopra cosa devo togliere di quello che ho citato ? Si durante queste ore mi sono messo a cercare ma ho visto che infatti sono inesistenti gli host con innodb, peccato, mi è piaciuto il sistema molto semplice.

  7. #7
    up

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.