Вставьте минимально возможное уникальное положительное целое число атомарным способом в MySql - PullRequest
2 голосов
/ 14 апреля 2010

Допустим, у меня есть таблица с уникальным положительным целочисленным полем. В настоящее время у меня есть строки с идентификаторами [1, 2, 3, 4, 5, 8, 12, 35]. Можно ли написать запрос на вставку, который бы назначил поле идентификатора наименьшему уникальному положительному целому числу (в данном случае 6)? Это должно было бы быть сделано атомарно, чтобы не было возможности одновременных вставок, уничтожающих друг друга или терпящих неудачу.

1 Ответ

1 голос
/ 14 апреля 2010

Я бы не использовал бы это для заполнения "пропущенных" идентификаторов, но это должно работать:

Insert Into t (id)
  Select Coalesce( Min(t.id) + 1, 0 )
  From t
  Left Join t As t2 On ( t2.id = t.id + 1 )
  Where t2.id Is Null

Получите все id s, где id + 1 не существует (Left Join), и вставьте Min(id)+1 или 0, если не доступен.

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