создание первичного ключа на основе даты

Я пытаюсь создать уникальный идентификатор для каждой записи в зависимости от даты создания записи. Например, если запись создана сегодня, я хочу, чтобы ключ был 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 цифр.