我为我正在尝试测试许可系统的项目提供了密钥(仅仅是为了好玩和学习)我认为我遇到的一个部分是如何分发密钥。我在数据库中有大约100个密钥,我正在尝试找出分发它们的最佳方法。数据库的布局如下,
ID (Auto Increment) | key
使用PDO库,ID按时间顺序排列的最有效方法是什么?但即使我按时间顺序排列,当我删除所发出的密钥时,我将如何按时间顺序排列?或者也许是随机身份证号码我不知道如何分配这些密钥的最有效方法?
答案 0 :(得分:2)
如果我理解你的问题......
您可以通过PDO尝试此查询:
SELECT * FROM `table-name`
ORDER BY `ID` ASC
然后当你从执行的返回中逐步执行while()循环中的行时,它将按照你要求的时间顺序排列。
就丢失ID而言,就像删除ID为#10的密钥一样,您的表将在返回的行ID中从9跳到11。添加新密钥时,除非您在插入时专门指定该ID,否则不会使用#10。
编辑:从你的问题的措辞来看,听起来你可能会担心如何设置密钥的ID。也许你已经理解了这一点,但由于你有自动增量,你插入新密钥时会自动生成你的ID,因此新密钥将被分配一个ID(最后插入密钥的ID)+ 1。
答案 1 :(得分:1)
年表并不完全是PDO的一个特性,或者无论您使用什么数据库驱动程序......这都是您的架构问题。
通常,任何数据库结构中的常用字段是“时间戳”或“已创建”字段,用于保存在数据库中创建记录的时间。这些字段可以是MySQL数据类型TIMESTAMP
(在这种情况下驱动程序将返回自Unix Epoch以来的秒数),或DATETIME
(在这种情况下,大多数驱动程序将尝试返回语言的本机DateTime对象(如果存在) 。)即使单调增加的主键在排序时暗示了一定量的时间顺序,时间戳字段也可以记录在服务器上创建记录的确切时间,以及使用ON UPDATE CURRENT_TIMESTAMP
更新更改。所以我建议将其添加到您的架构中。
在数据库中使用这样的字段,您始终可以使用以下方式对查询进行排序:
SORT BY timestamp_field_name ASC
此外,如果通过“分发”表示某些数据可以通过使用此密钥作为某种查询参数来公开访问,我不会因为您描述的确切原因使用单调主键,特别是如果这是“许可”概念证明,如果你的意思是DRM类型的东西应该产生一个复杂的字符串。 UNIQUE
字段中的哈希时间戳或php uniqid
函数可以生成可以使用VARCHAR
键约束存储在UNIQUE
数据库字段中的值。如果我理解了您描述的目标,那就是这样。