Автоинкремент первичного ключа без установки идентификатора - PullRequest
3 голосов
/ 22 октября 2009

Я использую следующий синтаксис для вставки новых записей (я не хочу иметь дубликаты ключей):

insert into tbl(key) values select max(key)+1 from tbl

Кто-то говорит, что у него будет проблема с параллелизмом.
Это верно?

SELECT -> LOCK table -> INSERT

или

LOCK table -> SELECT -> INSERT

Что из перечисленного является правильным?

Ответы [ 3 ]

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

Если вы выполняете репликацию, лучше всего использовать GUID в качестве первичного ключа, а также "пожалуйста", не создавайте кластерный индекс для этого столбца.

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

Если это произойдет внутри транзакции, у вас все будет в порядке.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...