Всегда ли базы данных блокируют несуществующие строки после запроса или обновления?

Дано: I»

customer[id BIGINT AUTO_INCREMENT PRIMARY KEY, email VARCHAR(30), count INT]

я хотел бы выполнить следующее атомарно: обновить клиента, если он уже существует; в противном случае введите нового клиента.

В теории это звучит как идеально подходит дляSQL-MERGE но база данных, которую я использую, нет поддержкаMERGE со столбцами AUTO_INCREMENT.

https://stackoverflow.com/a/1727788/14731 похоже, указывает на то, что если вы выполняете запрос или оператор обновления для несуществующей строки, база данных заблокирует индекс, тем самым предотвращая одновременные вставки.

Это поведение гарантируется стандартом SQL? Есть ли базы данных, которые не ведут себя таким образом?

ОБНОВИТЬК сожалению, я должен был упомянуть об этом ранее: решение должно использовать READ_COMMITTED изоляцию транзакцииесли это невозможно, и в этом случае я приму использование SERIALIZABLE.

Ответы на вопрос(4)

Ваш ответ на вопрос