Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554

    [Mysql] insert con condizione

    Ciao a tutti,
    è possibile fare una insert solo se nella colonna b il valore $b e nella colonna c il valore $c non sono già presenti nella tabella?
    Premetto che:
    le colonne b e c non sono ne chiavi primarie ne unique
    la ON DUPLICATE KEY UPDATE non sembra fare al caso per la premessa sopra
    la REPLACE non sembra fare al caso mio per la stessa premessa della precedente

    solitamente la cosa la approccio in questo modo:
    select id from t where b=$b and c=$c
    se restituisce una riga non faccio nulla altrimenti faccio una insert into t set b=$b, c=$c
    c'è un sistema migliore?
    Vivrò una vita intera e fortunatamente morirò una volta sola

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Se non vuoi definire indici unique sulle due colonne direi che un sistema migliore non c'è, ma così devi almeno fare un lock sulla tabella, altrimenti ti esponi al rischio che elaborazioni concorrenti facciano inserimenti doppi

  3. #3
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554
    Originariamente inviato da luca200
    Se non vuoi definire indici unique sulle due colonne direi che un sistema migliore non c'è
    La questione è che la coppia colonna b e colonna c è unica ma prese singolarmente no, non so se si può fare di meglio.

    ma così devi almeno fare un lock sulla tabella, altrimenti ti esponi al rischio che elaborazioni concorrenti facciano inserimenti doppi
    Il lock comporta complicazioni/accorgimenti particolari?
    Vivrò una vita intera e fortunatamente morirò una volta sola

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da pyotrex
    La questione è che la coppia colonna b e colonna c è unica ma prese singolarmente no, non so se si può fare di meglio.
    Puoi anche definire un indice su due campi eh

    Il lock comporta complicazioni/accorgimenti particolari?
    No

  5. #5
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554
    Originariamente inviato da luca200
    Puoi anche definire un indice su due campi eh
    ALTER TABLE `t` ADD UNIQUE (`b` ,`c`);

    così?
    Vivrò una vita intera e fortunatamente morirò una volta sola

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.