Я хочу сделать что-то вроде этого:
SELECT * FROM TABLE where *condition*
... TEST for a row being returned
IF NOT
INSERT the row
Другими словами, я хочу вставить строку в таблицу, только если ее там еще нет.Меня беспокоит то, что во время тестирования набора результатов строка может быть вставлена другим процессом.Я не буду знать это, и две строки будут вставлены.Я не хочу, чтобы это произошло.
Я думал об объединении двух операторов в транзакции, но я подозреваю, что это не ответ;Я не знаю, имеют ли транзакции эффект, похожий на блокировку таблицы во время их выполнения, предотвращая тем самым любые другие вставки между моим SELECT и INSERT?Это вопрос.
Я подозреваю, что лучший способ сделать это - просто установить уникальный ключ для столбцов в строке и предотвратить повторные вставки.Но я все еще задаюсь вопросом, верна ли моя идея об использовании транзакций или нет?