2014-03-31 118 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查詢填充值。