MySQL自动增量ID基于其他两列的值

时间:2014-03-31 11:30:02

标签: mysql sql

有没有办法根据插入行中另外两列的值自动递增数据库的id字段?

我想设置我的数据库,以便在同时插入多行时,他们会保持tracknumber排序。 ID字段应首先根据自动生成的timestamp字段自动递增,然后再根据该时间戳中包含的tracknumber自动递增。

以下是数据库外观的示例:

id |  tracknumber | timestamp
________________________________________

1  | 1            | 2014-03-31 11:35:17
2  | 2            | 2014-03-31 11:35:17
3  | 3            | 2014-03-31 11:35:17
4  | 1            | 2014-04-01 09:10:14
5  | 2            | 2014-04-01 09:10:14

我一直在阅读触发器,但不确定这是否合适?我觉得我似乎错过了一个明显的功能。

2 个答案:

答案 0 :(得分:1)

评论时间有点长。

没有自动方法来执行此操作。如果您愿意,可以使用触发器来完成。请注意复数,如果您希望编号在数据更改时保持准确,则需要insertupdatedelete的触发器。

如果目标是枚举值,则可以在查询端执行此操作。以下是使用子查询的一种方法:

select t.*,
       (select count(*) from table t2 where t2.timestamp = t.timestamp and t2.id <= t.id
       ) as tracknumber
from table t;

对于table(timestamp, id)上的索引,这种表现甚至可能是合理的。

如果数据创建一次,您还可以使用update查询填充值。

答案 1 :(得分:0)

如果要将它们插入到一个事务和/或脚本中,那么根据这两个字段在服务器端自己对数据进行排序(假设您也在服务器端创建时间戳,因为这似乎是合乎逻辑的)然后插入一行接连不断。我不认为有必要过度思考这个并在数据库中寻找一种困难的方法。数据库仍然会一个接一个地插入行,而不是一次插入所有行,因此它无法预先知道它需要进行某种排序。是你必须这样做。

相关问题