2013-03-04 12 views
5

Vorrei un semplice esempio di MySQL se, altrimenti, dichiarazione endif.Come scrivere un MySQL in caso contrario la dichiarazione endif?

voglio fare qualcosa di simile (in Java):

SELECT COUNT(*) FROM `table` WHERE `userID` = 1 

if(count == 0){ 
    INSERT INTO `table` (`userID`,`A` ,`B`)VALUES ('1', '323', '232') 
} 
else{ 
    UPDATE `table` SET `A` = '323', `B` = '232' WHERE `userID` =1 
} 
+2

, cercando in vostro codice posso suggerisco di usare INSERT ON DUPLICATE KEY UPDATE invece –

risposta

8

MySQL ha INSERT ON DUPLICATE KEY UPDATE che consente di aggiornare se il valore già esiste o Inserire in caso contrario.

Per prima cosa è necessario attivare un UNIQUE vincolo,

ALTER TABLE myTable ADD CONSTRAINT tb_uq UNIQUE (ID) 

il gioco è fatto, se si desidera ID essere unico. (Questo è solo un esempio)

INSERT INTO tableName(userID, A, B) 
VALUES (1, 323, 232) 
ON DUPLICATE KEY 
UPDATE A = 323, 
     B = 232 
+0

Quella frase esatta non funziona, non si inserisce se c'è un duplicato. C'è qualcosa che manca? –

+0

@EricBanderhide È del tutto normale, aggiornerà il record corrente solo se la chiave esiste già. Cos'altro devi fare? –

+0

Inserirà correttamente se la chiave non esiste. Ma non se lo fa, ho impostato il tavolo per essere unico. Ho aggiornato la mia domanda potresti dare un'occhiata alla mia dichiarazione? –

4

L'istruzione if (in un blocco memorizzato):

IF search_condition THEN statement_list 
    [ELSEIF search_condition THEN statement_list] ... 
    [ELSE statement_list] 
END IF 

O il caso di funzione (in-line):

IF(expr1,expr2,expr3) 

che funziona come: IF (condizione, what_to_do_if_true, what_to_do_if_false) L'ultima parte è uguale a un 'altro'. Un if-else-se avrebbe bisogno di essere integrato come:

SELECT IF(id==1, "1", IF(ID==2, "2", "Neither"); 

che avrebbe fatto lo stesso di questo nella maggior parte dei linguaggi di programmazione:

if(id == 1) { 
    print "1" 
} elsif(id == 2) { 
    print "2" 
} else { 
    print "Neither" 
}