Генерация уникального 10-значного номера - PullRequest
1 голос
/ 09 июня 2011

Я хочу сгенерировать идентификаторы клиентов для счетов и, следовательно, не хочу начинать отсчет с 1 по очевидным причинам.В MySQL вы можете сгенерировать уникальное случайное число?

Я знаю о функции RAND (), но она не гарантирует уникальность.Какой правильный подход для этого?

Не работает:

INSERT INTO test (number) VALUES (FLOOR(0 + (RAND() * 9999999999)));

PS: на стороне сервера я использую PHP и генерирую счета с помощью FPDF.

Ответы [ 3 ]

4 голосов
/ 09 июня 2011

Я предлагаю столбец AUTO_INCREMENT и заполняю значение 10 цифрами.Вы можете сделать так, чтобы это был единственный столбец в таблице, как показано ниже, или, более практично, заполнить идентификатор таблицы счетов.

CREATE TABLE tablename (
  id bigint unsigned not null auto_increment,
  primary key(id),
  auto_increment=1000000000
);
2 голосов
/ 09 июня 2011

На самом деле, причины не так очевидны, если только вы просто не хотите, чтобы ваши клиенты знали, что их так мало, что у всех есть однозначные идентификаторы: -)

Кроме того, идентификатор клиента обычно генерируется при добавлении клиента , а не при выставлении счета. Если вы имели в виду номер счета-фактуры, это другое, но рассуждения будут такими же.

Либо заполните таблицу фиктивной записью с подходящим более низким идентификатором (например, 314159), затем используйте что-то вроде:

insert into test (number) select max(number)+1 from test

или используйте автоинкрементный ключ с подходящим начальным значением (опять же, это значение зависит от вас, но вы должны выбрать что-то относительно «некруглое»).

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

0 голосов
/ 09 июня 2011
ALTER TABLE my_invoice_table auto_increment=1000000001

Увеличивающиеся номера счетов-фактур хороши - они должны быть только уникальными, а не случайными.

...