Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    45

    Problemi con Aruba e le Foreign Key

    Salve a tutti..
    Spero di aver postato nella parte esatta del forum..
    Sto creando il mio sito web, uso aruba per pubblicarlo, in oltre uso sempre su arba di un Database.
    prima di pubblicarlo ho creato tutto il sito e il DataBase MYSQL, sul mio pc di case. Li nessun problema. Il problema nasce quando vado a creare il database su aruba.
    VEdiamo il codice SQL
    Ho due tabelle categorie e prodotti.
    La tabella prodotti ha un foreign key a due campi della tabella categoria.
    posto l'SQL del database.
    Tabella Categorie
    codice:
    CREATE TABLE `categorie` (
      `id` int(11) NOT NULL auto_increment,
      `nome` varchar(45) NOT NULL,
      `width` int(10) unsigned NOT NULL default '0',
      `height` int(10) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id`,`nome`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    tabella Prodotti
    codice:
    CREATE TABLE `prodotti` (
      `id` int(11) NOT NULL auto_increment,
      `id_categoria` int(11) default NULL,
      `nome` varchar(45) default NULL,
      `descrizione` longtext NOT NULL,
      `nome_categoria` varchar(45) default NULL,
      `immagine` varchar(45) NOT NULL default '',
      PRIMARY KEY  (`id`),
      Foreign Key (id_categoria,nome_categoria) references categorie(id,nome) ON DELETE SET NULL ON UPDATE CASCADE
     ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    Se in locale vado a modificare il nome di una categoria, dal sito in locale, va tutto bene la categoria viene aggiornata anche nella tabella prodotti.
    Invece se faccio l'aggiornamento del nome di una categoria dal sito, pubblicato su aruba, il nome della categoria, nella relativa tebella viene aggiornato, ma nella tabella prodotti rimane il vecchio valore..

    Qualcuno mi sa spiegare come mai succede cio?

  2. #2
    Non vorrei dire una baggianata, ma guarda che le foreign keys non sono valide per le tabelle MyISAM; così per le informazioni ON CASCADE DELETE o UPDATE.

    Per questo tipo di funzionalità il motore delle tabelle deve essere InnoDB, quindi transazionale.

    :master: Non mi chiedere però perché in locale ti funzioni..... probabilmente hai delle impostazioni di MySQL piuttosto blande.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    45
    Originariamente inviato da alcio74
    Non vorrei dire una baggianata, ma guarda che le foreign keys non sono valide per le tabelle MyISAM; così per le informazioni ON CASCADE DELETE o UPDATE.

    Per questo tipo di funzionalità il motore delle tabelle deve essere InnoDB, quindi transazionale.

    :master: Non mi chiedere però perché in locale ti funzioni..... probabilmente hai delle impostazioni di MySQL piuttosto blande.

    Ok grazie ...
    il problema è proprio quello...
    quando ho fatto l'export da locale del DB nn ho fatto proprio caso che nn era InnoDB...
    anche se in locale uso InnoDB :master:
    CMQ ti ringrazio per avermi fatto notare la svista ..
    ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    45
    ho importato su aruba il file con l'sql esatto
    Ma nulla è cambiato... se riesporto il db e vado a leggere il file mi trovo sempre con MyISAM..
    c'è un modo per cambiarlo da phpMyAdmin ?? Parlo del DB ke sta su aruba.. perchè quello in locale è correttamente impostato con lo Storage Engine a InnoDB...

  5. #5
    Sospetto che l'hoster da te nominato (occhio che ti bannano il messaggio la prossima volta ) non supporti il motore InnoDB.

    Credo per due motivi: uno prestazionale (il motore InnoDB potrebbe rallentare il server MySQL se mal sfruttato), l'altro di sicurezza (se non ricordo male, le tabelle InnoDB vengono tutte salvate in uno stesso file, per cui qualche malintenzionato potrebbe riuscire a prendere possesso dei dati di tutti i DB presenti).
    Peraltro, il servizio che hai menzionato è orientato ad un utilizzo non propriamente professionale, per cui le interazioni classiche dei DB transazionali, molto spesso non vengono neanche prese in considerazione da chi si appoggia a determinati servizi.

    Concludo.
    Bloccare l'uso delle tabelle InnoDB è una questione che si ottiene in fase di installazione del server MySQL.
    Non credo proprio che si possa attivare via PhpMyAdmin.

    Contatta l'hoster e chiedi se, e semmai come, è possibile attivare tali feature.... questa è l'unica cosa che ti posso consigliare.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

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