Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [mysql] multipla query insert - update

    Ciao a tutti.
    Nella mia tabella è previsto solo l'inserimento di un record. Dispongo di una query che mi fa l' update cambiandone i valori. Ma nel caso non sia presente nessun record dovrei scrivere del codice a parte con la query insert, perchè facendo l'update non funziona (e quì molti diranno: "hai scoperto l'acqua calda!").
    Io uso mysql 4.1 e mi chiedevo se esisteva la possibilità di creare una query unica che mi inserisca e mantenga solo un record, una sorta di update / insert.

    Ciao

  2. #2
    puoi usare REPLACE ... ha la stessa sintassi di INSERT

    usa la chiave primaria però per sostituire quindi metti una chiave primaria finta in modo che tenendo quello fisso REPLACE sa se deve inserire o updatare ... o + semplicemente inserisci a priorio la riga, magari metti un flag per indicare se è valida o meno e a ogni update imposti il flag su valida ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    Non ho una conoscenza approfondita di questo statment, e tra l'altro non ho trovato la risposta nemmeno sul sito mysql.
    Comunque, in uno dei due casi mi trovo la tabella completamente vuota, priva di qualsiasi record.

    Se provo con questa query mi va errore perchè non trova l'id.
    codice:
    REPLACE primo_piano SET title = 'TEST_1' WHERE id_primo_piano = 1

  4. #4
    REPLACE usa la sintassi di INSERT e non quella di UPDATE.
    codice:
    REPLACE INTO primo_piano 
    (id_primo_piano, title)
    VALUES (1, 'TEST_1')
    Occhio che id_primo_piano non sia un auto_increment. REPLACE se trova una corrispondenza nella chiave primaria oppure se esiste un campo UNIQUE con lo stesso valore, cancella il record e ne scrive un altro. Se non trova corrispondenza aggiunge. Ma se e' autoincremente assegnera' un nuovo id e non quello precedente ...


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

  5. #5

  6. #6
    ok ci sono. Mi funziona.
    Posso anche chiedervi la differenza tra la primary_key e la unique.
    Grazie

  7. #7
    possiamo dire con parole semplici che la chiave primaria è una chiave essenziale per la tabella, ovvero quella che effettivamente differenzia le righe tra loro, infatti non vi può essere più di una chiave primaria (una chiave primaria può comunque contenere + campi, anche se solo uno di essi può essere autoincrement)

    la chiave unica indica sotanto che il valore contenuto in una data riga non può ripetersi in altre nella colonna impostata su chiave unica

    nel caso di + colonne su chiave unica allora la combinazione tra i valori delle colonne non può ripetersi

    cmq ora viene piero che spiega meglio ^^

    cmq la differenza sostanziale è che le primarie son fatte (e son gestite) appositamente per funzionare da discriminatore tra le righe, le uniche no, anche se sono molto simili con le primarie (questo a livello logico perché a livello pratico forzando mysql a bloccare l'inserimento di valori uguali nella stessa colonna sulle varie righe permette distinguere le varie righe tramite quella specifica chiave)
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  8. #8
    Daniele si e' spiegato benissimo...

    A maggior chiarezza si potrebbe dire, anche se non e' esattissimo, che una chiave primaria identifica una tupla in modo univoco possibilmente "senza riferimento" al contenuto della tupla stessa, non puo' mai essere NULL, non dovrebbe mai essere modificato, dovrebbe essere semplice (numerico), contenere solo un tipo di valore, a lunghezza fissa ecc... ottimale un campo numerico auto_increment.

    Una chiave UNIQUE pur identificando anche lei in modo univoco una tupla e' parte del contenuto di una tupla cioe' significativo per il contenuto, e puo' essere modificato, eliminato e puo' essere NULL, puo' contenere qualunque cosa. Solo non puo' essere un valore doppio, cioe' gia' presente.

    Nello specifico REPLACE utilizza la chiave primaria oppure la chiave UNIQUE per identificare una tupla. Ma ripeto.. non la modifica ... se la trova la cancella e la riscrive ex-novo (due azioni) e l'autoincrement, se presente, avanza di uno. Bisogna quindi passare "tutti" gli argomenti della tabella esattamente come per un INSERT altrimenti il campo omesso rimarra' vuoto.


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

  9. #9
    ok, ho capito la differenza. Immagino che una tabella possa possedere una primary_key ed una unique allo stesso tempo.
    Riuscite a farmi un semplice utilizzo della unique. Cioè, in quali casi potrebbe essere utilizzata.
    Grazie

  10. #10
    nel caso tu abbia necessità di rendere unico un campo ... ad esempio in una tabella contenente degli utenti le colonne username ed email le mettere su due chiavi unique distinte perché devono essere dati unici
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

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.