2014-03-31 83 views
2

有没有办法根据插入的行中其他两列的值自动增加数据库的id字段?MySQL基于其他两列的值自动增加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 

我一直在触发读了,但不知道这是合适的吗?我觉得好像我错过了一个明显的功能。

回答

0

如果您将它们插入到一个事务和/或脚本中,则根据这两个字段(假设您在服务器端创建时间戳,因为这看起来是合乎逻辑的),自己在服务器端对数据进行排序,然后插入行相继。我不认为有必要过时这一点,并在数据库中寻找困难的方法。数据库仍然会一个接一个地插入行,而不是一次全部插入,所以没有办法知道它需要事先进行某种排序。你必须这样做。

+0

有用 - 绝对是超越它。现在在多个列上使用ORDER BY来实现正确的排序。 – Byate

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查询填充值。