Sql вставить, если не существует, в противном случае (совершенно другое) обновление - PullRequest
0 голосов
/ 03 октября 2009

Я хочу вставить строку, но только если она не существует, в противном случае мне нужно увеличить один столбец, переписать другой и т. Д. Как я могу это сделать? Нужен ли мне выбор? Я надеюсь, что есть оператор INSERT или UPDATE, который сообщит мне, если он потерпит неудачу, чтобы я мог сделать другое.

Я использую sqlite ATM, и я могу переключиться на MySQL. Использование C # .NET.

Ответы [ 3 ]

1 голос
/ 03 октября 2009

Я не знаю ни одного чистого SQL-оператора, который бы делал именно то, что вы хотите. В большинстве сред для запуска SQL (например, DBI и т. Д.) Есть какой-то способ сообщить количество затронутых строк. Таким образом, вы можете выполнить обновление, и если оно не попадет ни в одну строку, выполните вставку.

Если это не вариант, сначала выполните обновление, а затем вставку. Если строка существует, обновление будет работать, и вставка не удастся при нарушении ключа. Если строка не существует, обновление не попадет ни в какие строки, и вставка должна завершиться успешно.

0 голосов
/ 03 октября 2009

sqlite3_changes скажет вам, сколько строк было затронуто последним оператором. Сначала попробуйте выполнить ОБНОВЛЕНИЕ, если оно изменится. 0 строк сделайте INSERT.

0 голосов
/ 03 октября 2009

Вы также всегда можете сделать и то, и другое:

INSERT IGNORE ...

Тогда

UPDATE ...

Это будет работать без поля AUTO_INCREMENTING.

...