Атомный инкремент столбца без auto_increment в MySQL - PullRequest
1 голос
/ 18 ноября 2011

У меня есть таблица с двумя столбцами. Одним из них является auto_increment скажем columnA, тогда как другим является не auto_increment скажем columnB. Я хочу выполнить два типа операций вставки в столбце B:

  1. Вставить постоянное число (для преднамеренного дублирования)
  2. Вставить максимум (столбец B) + 1 (это не должно вызывать дублирования)

Операция 1 проста, но в операции 2 может быть дублирование, поскольку операция не является полностью атомарной. Я планирую использовать следующий SQL:

вставить таблицу (столбец B), выбрать максимум (столбец B) +1 из таблицы

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

Еще одна вещь, если вы предлагаете блокировку таблицы, есть ли в любом случае задержка вставки вместо возврата ошибки из-за блокировки таблицы?

1 Ответ

0 голосов
/ 18 ноября 2011

Вы можете написать триггер, который автоматически увеличивает ваш столбец B, если это необходимо.

...