2013-03-04 19 views
5

Chciałbym prosty przykład MySQL jeśli, else, instrukcja endif.Jak napisać instrukcję endin dla MySQL?

chcę zrobić coś takiego (w Javie):

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

patrząc na kodzie może Proponuję użyć INSERT ON DUPLICATE KEY UPDATE zamiast –

Odpowiedz

8

MySQL ma INSERT ON DUPLICATE KEY UPDATE który pozwala na aktualizację, jeżeli wartość już istnieje lub Wstawić, jeżeli nie.

Najpierw trzeba skonfigurować UNIQUE ograniczeń,

ALTER TABLE myTable ADD CONSTRAINT tb_uq UNIQUE (ID) 

to wszystko jeśli chcesz ID być unikalne. (Jest to tylko przykład)

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

To dokładne stwierdzenie nie działa, nie wstawia się, jeśli jest duplikat. Czy czegoś brakuje? –

+0

@EricBanderhide To całkowicie normalne, zaktualizuje tylko bieżący rekord, jeśli klucz już istnieje. Co jeszcze musisz zrobić? –

+0

Zostanie wstawiona poprawnie, jeśli klucz nie istnieje. Ale nie, jeśli tak, ustawiłem tabelę tak, aby była wyjątkowa. Zaktualizowałem moje pytanie, czy mógłbyś rzucić okiem na moje oświadczenie? –

4

if (w przechowywanego bloku):

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

Lub jeśli funkcja (in-line):

IF(expr1,expr2,expr3) 

która działa jako: IF (warunek, what_to_do_if_true, what_to_do_if_false) Ostatnia część jest taka sama jak "else". If-else-if musiałaby być osadzone jak:

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

Które tak samo jak ten w większości języków programowania:

if(id == 1) { 
    print "1" 
} elsif(id == 2) { 
    print "2" 
} else { 
    print "Neither" 
} 
Powiązane problemy