【发布时间】:2014-11-19 05:36:49
【问题描述】:
我有一个 ID 字段,我希望它具有以下格式: YYMMDDXXXXXXXXX,其中 YY 是年,MM 是月,DD 是日,XXXXXXXX 是带有前导零的实际 ID 号。此外,当日期更改时,ID 号应重置为 0。
首先,对于同时作为主键的 ID 字段,这是不是一个不太好的做法/格式?
实施:
我将数据插入到我的数据库中,抛出了 php,我想出了 2 种方法来实现上述格式。
- 使用 php 插入查询手动插入(没有 AUTO_INCREMENT
字段),我选择MAX(id),拆分它(date-id),检查当天是否有
更改,然后将其增加一或将其替换为
新日期+0s。这种方式的问题是我必须做一个额外的
选择并检查/更改字符串,如果我有超过 20 个,SELECT 可能会返回相同的 MAX(id)
requests/sec 和
date('Ymd')导致 apache 崩溃 超过 60 个请求/秒。 - 在 ID 字段上添加 AUTO_INCREMENT 并将 AUTO_INCREMENT 设置为
YYMMDD00000000 当一天改变时,然后让 auto_increment
做这项工作。我试过
ALTER TABLE foo AUTO_INCREMENT=(SELECT CURDATE()*100000000)但正如我所料 CURDATE() 不能 像这样使用。
对我的尝试有任何想法和/或帮助都会很棒,感谢您的宝贵时间。
【问题讨论】:
-
您应该将此数据分成两列
-
我已经有一个日期列,但我还需要将它作为前缀存储在 id 列上。
-
@tsta 为什么?我们无法判断这里是否有真正的理由,是否是XY Problem,或者是否可以通过不同的方式更有效地解决问题。现在所有可见的都是一个坏主意。
标签: php mysql sql auto-increment prefix