我正在尝试根据创建记录的日期为每条记录创建一个唯一的ID。例如,如果今天创建了记录,我希望密钥为20101130XX,其中XX将是01,02,03等数字的连续列表...如果今天有多个人创建记录。
如果3个人昨天创建了记录,那么他们的唯一ID就是
2011032700 2011032701 2011032702
然后午夜来了,有人会创建一个新的记录
2011032800
这样做的目的是为每条记录提供一个唯一的ID,用于引用故障单。
我们已经在使用日期格式,但是目前用户必须手动输入ID,这可能会产生错误,例如2012032700应该是2011032700而不是将2011年放入2012年
我只是不确定如何创建触发器来生成此类唯一ID,并希望获得任何帮助
答案 0 :(得分:6)
来自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,我认为您必须编写自己的触发器来实现此行为。
答案 1 :(得分:2)
这种方法根本不起作用,因为@Charles是真的。您不能依赖时间戳,因为可能存在重复(碰撞)。
创建一个简单的自动增量ID,然后保存时间戳,你会很开心。
答案 2 :(得分:0)
如果每天的参赛人数超过99,你会怎么做?如果您非常想使用“20101130XX”索引,我建议您使用复合键:
CREATE TABLE `test` (
`date` date NOT NULL,
`id` tinyint(4) NOT NULL,
`other_fields` varchar(255) DEFAULT NULL,
PRIMARY KEY (`date`,`id`)
);
答案 3 :(得分:0)
只需使用microtime()以确保没有重复的条目。
function getUniqueID() {
$mt = explode(' ', microtime());
return $mt[1] . substr($mt[0], 2, 7);
}
P.S。你可以使用7位数以下的低精度。