Mysql повторение инкрементных чисел? - PullRequest
1 голос
/ 06 августа 2009

Как я могу заставить Mysql постепенно генерировать число от 0 до 99999 и добавлять его в запись? Кроме того, как только 99999 достигнут, он начинает обратно в 0.

Ответы [ 3 ]

1 голос
/ 07 августа 2009

Создайте постоянно увеличивающееся число (например, стандартный auto_increment), а затем при выборе данных (или через представление) пропустите его через мод 100000:

⋮
99998  % 100000 = 99998
99999  % 100000 = 99999
100000 % 100000 = 0
100001 % 100000 = 1
⋮

Вы можете сделать это прозрачным, создав представление для выбора:

CREATE SQL SECURITY INVOKER VIEW whatever AS
  SELECT
    foo, bar, baz, autoid % 100000 AS autoid, taz
  FROM base_table;

К сожалению, это представление, вероятно, не будет обновляемым, и MySQL не поддерживает триггеры INSTEAD OF, поэтому вам придется отправлять записи в базовую таблицу.

0 голосов
/ 06 августа 2009

Если вам нужно сбросить его, вы можете создать триггер:

create trigger auto_number before insert on `sometable`
begin
    new.autoid = coalesce((select max(autoid)+1 from sometable),0) % 1000000
end

По сути, когда происходит insert, это просто устанавливает столбец autoid в качестве следующего наибольшего идентификатора. Тем не менее, он использует модуль по модулю, чтобы число повторялось на 1 000 000.

0 голосов
/ 06 августа 2009

Вы хотите AUTO_INCREMENT .

Хотя сброс его на 99999 может быть проблемой. Я бы также поставил под сомнение ваше требование, чтобы оно работало таким образом.

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