Pagina 1 di 11 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 107
  1. #1

    [MYSQL] chiave primaria o unica ... ma se non c'è ?

    salve

    ho un dubbio atroce su una questione di update in mysql ...

    allora, se devo fare un update o un delete ed ho un id auto_increment o uno uniqueid nessunproblema, il riferimento sarà quato campo.

    Ma nel caso non dovessi averne ?

    esempio
    codice:
    CREATE TABLE ingestibile (nome VARCHAR(255))
    ora con una tabella fagiana di questo tipo posso fare
    codice:
    INSERT INTO ingestibile VALUES('Pippo')
    INSERT INTO ingestibile VALUES('Paperino')
    INSERT INTO ingestibile VALUES('Pippo')
    e con una select avrò i 3 records ben distinti.

    Qualora volessi aggiornare questa tabella, ovvero qualora volessi cambiare solo la terza riga, mettendo Pluto invece di Pippo senza modificare anche la prima, come diamine posso gestire il tutto ?

    So che non ha senso una tabella così etc etc ... ma di fatto mysql permette di crearla e la gestisce, quindi il quesito principale è:

    esiste un modo per risalire ad un id univoco, magari interno, riferito a quella sola riga ?
    MySQL ha modo di effettuare l'update di quella sola riga ?


    Grazie per le eventuali risposte
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  2. #2
    come ti ho detto, ci sono 2 modi:
    - acquisisci TUTTA la tabella, fai la modifica che devi fare in memoria (tu sai dov'è partendo da un'indice interno che assegni tu alle righe), droppi la tabella usando un delete senza specificare il where o il truncate che è meglio, reinsierisci tutto usando le insert estese, ergo puoi fare tipo 500 reinserimenti in un colpo

    - aggiungi una chiave primaria autoincrement con l'alter, l'indice inserito corrisponderà al tuo indice interno calcolato semplicemente contando le righe, elimini la riga e rimuovi l'indice. Forse conviene anche cambiare al volo il tipo di tabella a memory e loccarla in modo che nn scrive nulla sul disco ed è tutto istantaneo ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    la seconda idea non è male ... ma come siamo messi a compatibilità con il 3 ?
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    non vedo quale sia il problema? :master: :master:

    anche il 3 aveva le tabelle di tipo heap/memory ma comunque è uno step non obbligatorio e per il resto ti basta addare quest'indice e impostarlo, sempre in un sol colpo, come auto-increment int unsigned ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #5
    uhm, m'hai convinto ... quindi clono in heap la tabella (però se è grande non può essere un problema ?) e la elimino dalla heap a fine aggiornamenti mentre sfrutto la heap per delete o update, giusto ?
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    74
    Se devi potere accedere a righe specifiche di quella tabella secondo me la soluzione più razionale è modificarne la struttura.
    Essendo poi identiche le righe "Pippo" perché dovresti modificare la terza riga? sarebbe ugualmente possibile fare un'update limitata ad un record a mio modo di vedere. Se poi ti modifica la prima o la terza non cambia nulla a livello di dati.

  7. #7
    Originariamente inviato da trucall
    Se devi potere accedere a righe specifiche di quella tabella secondo me la soluzione più razionale è modificarne la struttura.
    Essendo poi identiche le righe "Pippo" perché dovresti modificare la terza riga? sarebbe ugualmente possibile fare un'update limitata ad un record a mio modo di vedere. Se poi ti modifica la prima o la terza non cambia nulla a livello di dati.
    cambia a livello di posizione record e di modifica di valore di una riga che non volevi modificare, anche se contiene un dato duplicato.

    L'esempio è volutamente atipico, nel senso che bisogna essere idioti per avere una tabella come quella proposta, però è possibile farlo, mysql non dice niente, la crea, inserisce i records, fine.

    L'ideale sarebbe riuscire a farsi restituire una specie di identificativo univoco per ogni riga, generato magari da mysql stesso per gestire i records ... ed è questo che vorrei sapere se è possibile fare oppure no, altrimenti credo che l'unica sia la soluzione proposta da daniele.
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #8
    Originariamente inviato da andr3a
    uhm, m'hai convinto ... quindi clono in heap la tabella (però se è grande non può essere un problema ?) e la elimino dalla heap a fine aggiornamenti mentre sfrutto la heap per delete o update, giusto ?
    non devi clonare devi cambiarla di tipo

    ma fallo su tabelle piccole, guarda la dimensione e se superano tipo il mega nn convertirle che non si sa mai ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  9. #9
    mmmmmmmmmm

    forse giocando con LIMIT ... mmmmmmmmmm

    il delete supporta il limit ... ma l'update?

    ---

    anche l'update lo supporta



    puoi fare delete e update in modo infinitamente veloce

    l'unica cosa è che non so se va anche con versioni vecchie di mysql, ma in quel caso puoi emularlo tu in quel modo

    ---

    ok ... mi auto castro

    il limit funziona in modo diverso su update e delete ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #10
    avevo pensato anche io a LIMIT ... restituisco sempre un id creato runtime per ogni riga ed uso
    LIMIT $idfake per prendere esattamente quella ... ma la select ok, il resto ?
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.