2011-08-01 76 views
0

我正在向MySQL表添加東西,每個項目都有一個position,它在我的系統中顯示爲問題編號。MySQL智能默認值

我可以找出最大的position在添加新問題之前是什麼,然後添加它 - 但我想知道是否有更智能的方式,不需要第二個查詢。

類似於INSERT INTO questions (id, position) values (0, MAX(position))

該字段不是主鍵,auto_increment對這種情況沒有用。

我不能使用position作爲關鍵,因爲這個關鍵涉及很多其他的事情,並且position可以在任何時候改變。

我是一個非常有信心的MySQL查詢作家,所以請不要提供任何建議,除了問的問題 - 我知道很多替代品,這只是一個語法問題。

我相信你會得到我的漂移!

乾杯。

+0

像,一個自動遞增的索引也許? –

+0

不幸的是,這個表格存在多個調查問題,所以對我來說效果不好。 – Alex

+0

您可以隨時在插入時執行子查詢,並將「COUNT」加1。 –

回答

0

使用auto_increment像大多數其他人一樣嗎?

這是智能的方式,因爲它併發安全。

+0

我的'位置'字段不是關鍵,但我需要一個單獨的鍵,因爲可以隨時更改位置 – Alex

+0

使用一個單獨的表,然後有一個FK,它是當前表與另一個鍵的PK。但是,如果可以更改,那麼如果有人插入967並且更新發生42到1432,會發生什麼?它是獨特的嗎? – gbn

0

最好的方法是更改​​MySQL中的字段屬性,這意味着讓MySql在不提供輸入的情況下完成工作。

TABLE TableName CHANGE positionposition INT(11)NOT NULL AUTO_INCREMENT

現在插入時,沒有爲這個領域提供的任何值。

INSERT INTO questions (var1, var2) values (val1,val2)

MySQL將自動遞增的位置值。您可以設置當前計數器,並根據需要進行重置。這樣你根本沒有運行任何採石場。

+0

除了你只允許一個auto_increment字段,並且必須是主鍵。 – Alex

+1

auto_increment字段不必是主鍵。 – Tumharyyaaden

+0

'MySQL說: #1075 - 不正確的表定義;只能有一個自動列,並且必須將其定義爲鍵' – Alex

0

這樣的事情應該工作

INSERT INTO questions (id, position) SELECT 0, MAX(position)+1 FROM questions; 

顯然,你將需要處理的0值,如將其設置爲合適的東西,我只是複製了你的例子價值。

你也可以創建一個存儲過程在查詢中使用,或者甚至有一個觸發器決定MAX(位置),添加一個並將其存儲在新創建的行中。

很很多的選擇那裏,我會去的上述方案,但(與位置指數)

0

有沒有辦法設置一個默認值,具體的計算,它似乎。