Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117

    Eseguire più query in una sola volta

    Salve a tutti! Vi riporto un problemone che ho riscontrato qualche giorno fa...

    Ho sviluppato un sito che si aggancia a un DB MySQL. Tra i vari moduli ce n'è uno strutturato come da immagine:



    Avendo sviluppato in locale il tutto le 3 tabelle son collegate da varie foreign_key (quindi se cancello un disco automaticamente vengono cancellate tutte le tracce e a cascata le relazioni tra traccia e autore).
    Idem se cancello la traccia (vengono cancellate le relazioni con gli autori di quella traccia) ecc ecc

    Tutto bello automatizzato grazie al motore InnoDB di MySQL che consente di usare le Foreign_key...

    Carico tutto online sullo spazio web, eseguo il dump sul DB online fornitomi dal mio provider (di cui non faccio il nome ma è il più famoso in italia credo...almeno come fama...inizia per A :P) e scopro che i furbetti non mettono a disposizione InnoDB come motore ma MyISAM....il quale non supporta le foreign_key (ovviamente si son visti bene dallo specificare questa GRAVISSIMA carenza in fase di attivazione del servizio ma vabbè...)

    Ora mi trovo a gestire l'eliminazione dei records a mano con PHP..
    Mi scuso se mi son dilungata ma volevo rendere bene il quadro della situazione...

    La domanda è questa:

    Come posso muovermi per essere sicura che non rimangano record spezzati volanti?

    Es:
    • Cancello Un disco
    • Il disco viene cancellato dalla tab dischi quindi procedo a cancellare le tracce del disco (uso una IF)
    • qualcosa va storto nella connessione, o sul server ecc lo script va in DIE e si blocca
    • Mi ritrovo senza disco nella tab dischi ma con le tracce e le relazioni associate a quel disco


    Ho pensato di agire al contrario (eliminare prima le relazioni, poi le tracce, poi il disco) ma il problema resta.

    Esiste un modo per esser sicura che venga eliminato tutto? O di eliminare tutto in una volta?
    Io temo di no....

    Mi rimetto a voi esperti!

    Grazie a tutti!

  2. #2

    Re: Eseguire più query in una sola volta

    Originariamente inviato da Veronica80
    Salve a tutti! Vi riporto un problemone che ho riscontrato qualche giorno fa...

    Ho sviluppato un sito che si aggancia a un DB MySQL. Tra i vari moduli ce n'è uno strutturato come da immagine:



    Avendo sviluppato in locale il tutto le 3 tabelle son collegate da varie foreign_key (quindi se cancello un disco automaticamente vengono cancellate tutte le tracce e a cascata le relazioni tra traccia e autore).
    Idem se cancello la traccia (vengono cancellate le relazioni con gli autori di quella traccia) ecc ecc

    Tutto bello automatizzato grazie al motore InnoDB di MySQL che consente di usare le Foreign_key...

    Carico tutto online sullo spazio web, eseguo il dump sul DB online fornitomi dal mio provider (di cui non faccio il nome ma è il più famoso in italia credo...almeno come fama...inizia per A :P) e scopro che i furbetti non mettono a disposizione InnoDB come motore ma MyISAM....il quale non supporta le foreign_key (ovviamente si son visti bene dallo specificare questa GRAVISSIMA carenza in fase di attivazione del servizio ma vabbè...)

    Ora mi trovo a gestire l'eliminazione dei records a mano con PHP..
    Mi scuso se mi son dilungata ma volevo rendere bene il quadro della situazione...

    La domanda è questa:

    Come posso muovermi per essere sicura che non rimangano record spezzati volanti?

    Es:
    • Cancello Un disco
    • Il disco viene cancellato dalla tab dischi quindi procedo a cancellare le tracce del disco (uso una IF)
    • qualcosa va storto nella connessione, o sul server ecc lo script va in DIE e si blocca
    • Mi ritrovo senza disco nella tab dischi ma con le tracce e le relazioni associate a quel disco


    Ho pensato di agire al contrario (eliminare prima le relazioni, poi le tracce, poi il disco) ma il problema resta.

    Esiste un modo per esser sicura che venga eliminato tutto? O di eliminare tutto in una volta?
    Io temo di no....

    Mi rimetto a voi esperti!

    Grazie a tutti!
    beh si è possibile, devi fare una sql mirata per ogni tabella e vedere se non esiste il record di riferimento nella tabella "superiore" lo cancelli

    per record di riferimento intendo quello con la chiave della tabella "superiore"

    non so se sono riuscito a spiegarmi...

    ciao

  3. #3

    Re: Eseguire più query in una sola volta

    Originariamente inviato da Veronica80
    Esiste un modo per esser sicura che venga eliminato tutto? O di eliminare tutto in una volta?
    Io temo di no....
    La seconda che hai detto.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  4. #4
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117


    Allora dovrò cambiare provider per MySQL...consigli su uno economico che abbia db con innoDB?

  5. #5
    devi usare le transazioni: per semplificare una transazione è un gruppo di istruzioni sql che possono essere annullate se una di essere non va a buon fine(o per qualunque altro motivo).Non sono complicate da usare, anche se per quello che devi fare te è MOLTO meglio cambiare privider con uno che ti da innodb

  6. #6
    Originariamente inviato da leahcim
    devi usare le transazioni
    I DB MyISAM non supportano nè foreign key nè transazioni.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    non lo sapevo. A questo punto mi chiedo se il framework php che uso (ma la domanda vale per i framework in generale) quando usi le transazioni su db che non lo supportano (con la sintassi del framework) ti restituisce errore oppure simula la transazione con inserimenti veri e propri e successive cancellazioni vere e proprie, appana torno a casa verifico

  8. #8
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    ho appena scoperto che l'engine InnoDB l'hanno messo da metà 2011 e io ho acquistato il servizio prima...quindi nada xD
    Odiosi

  9. #9
    Originariamente inviato da Veronica80
    ho appena scoperto che l'engine InnoDB l'hanno messo da metà 2011 e io ho acquistato il servizio prima...quindi nada xD
    Odiosi
    Secondo me dovresti contattarli spiegando loro il problema e magari ti spostano su InnoDB. Altrimenti attiva un nuovo servizio MySQL (per quello che costa) e lascia scadere quello vecchio.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

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.