Одношаговой ответ на первый вопрос заключается в использовании что-то вроде:
update TBL set CLM = CLM + 1 where key = 'KEY'
Это очень много одной инструкции способ сделать это.
Что касается второго вопроса, вам не нужно прибегать к DBMS-специфической гимнастики S'L (например, UPSERT
) to get the result you want. There's a standard method to do update-or-insert that doesn't require a specific DBMS. ), чтобы получить результат, который вы хотите. Существует стандартный метод обновления или вставки, который не требует конкретного DBMS.
try:
insert into TBL (key,val) values ('xyz',0)
catch:
do nothing
update TBL set val = val + 1 where key = 'xyz'
То есть, вы пытаетесь сделать создание в первую очередь. Если он уже там, игнорировать ошибку. В противном случае вы создаете его с значением 0.
Затем сделать обновление, которое будет работать правильно ли или нет:
- строка изначально существовала.
- кто-то обновил его между вставкой и обновлением.
Это не одна инструкция, и все же, как ни странно, это, как мы делаем это успешно в течение длительного времени.