Я пытаюсь создать уникальный идентификатор для каждой записи в зависимости от даты создания записи. Например, если запись создана сегодня, я хочу, чтобы ключ был 20101130XX, где XX был бы последовательным списком чисел, таких как 01, 02, 03 и т. Д. … в случае, если сегодня более одного человека создает запись.
Если бы 3 человека создали записи вчера, их уникальные идентификаторы были бы
2011032700 2011032701 2011032702
а затем приходит полночь, и кто-то создает новую запись, это будет
2011032800
Цель этого – предоставить каждой записи уникальный идентификатор, который будет использоваться для ссылки на билет.
Мы уже используем формат даты, но в настоящее время пользователям приходится вручную вводить идентификатор, и он может создавать ошибки, такие как 2012032700, когда он должен был быть 2011032700, поэтому вместо того, чтобы ставить 2011, они ставят 2012
Я просто не уверен, как создать триггер для создания этого уникального идентификатора и будет признателен за любую помощь
С dev.mysql.com: example-auto-increment.html
Для таблиц MyISAM и BDB вы можете указать AUTO_INCREMENT на вторичном столбце в индексе с несколькими столбцами . В этом случае генерируемое значение для столбца AUTO_INCREMENT вычисляется как MAX(auto_increment_column) + 1 WHERE prefix=given-prefix
. Это полезно, если вы хотите поместить данные в упорядоченные группы.
Итак, сделайте 2 столбца на столе, один dateEntered и один (auto_incremented) id, например:
CREATE TABLE yourTable ( dateEntered DATE NOT NULL, id INT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (dateEntered, id) ) ENGINE=MyISAM;
Если вы не используете ISAM, но InnoDB, я думаю, вам придется написать свой собственный триггер, который реализует это поведение.
Этот подход просто не будет работать, потому что @Charles истинно. Вы не можете полагаться на временную метку, потому что есть вероятность дублирования (столкновения).
Создайте простой идентификатор автоинкремента, затем сохраните временную метку, и вы будете счастливы.
Что вы будете делать, если количество записей в день превышает 99? Если вы сильно хотите использовать индекс «20101130XX», я бы рекомендовал вам использовать составной ключ:
CREATE TABLE `test` ( `date` date NOT NULL, `id` tinyint(4) NOT NULL, `other_fields` varchar(255) DEFAULT NULL, PRIMARY KEY (`date`,`id`) );
Просто используйте microtime (), чтобы убедиться, что нет повторяющихся записей.
function getUniqueID() { $mt = explode(' ', microtime()); return $mt[1] . substr($mt[0], 2, 7); }
PS Вы всегда можете использовать более низкую точность, чем 7 цифр.