2010-02-19 69 views
1

今天早些時候我問了這個問題,但我不確定我是多麼清楚。將列更改爲Auto_Increment

我有一個MySQL列填充有序號碼1-56。這些數字是由我的PHP腳本生成的,而不是由auto_increment生成的。

我想要做的就是在PHP腳本設置正確的數字之後使此列auto_incrementing。 PHP腳本與jQuery接口協同工作,允許我使用jQuery的UI插件重新排列項目列表。

一旦我決定了我想要的條目的順序,我希望列設置爲自動增量,這樣如果我插入一個新條目,它會識別已存在的最高數字在列中,並將其自己的ID號設置爲比已有的ID高一個。

有沒有人有任何建議如何處理這種情況?

+0

你想在數據庫中自動增加嗎? – 2010-02-19 01:16:08

+0

是的 - 我有另一個腳本,將簡單地添加到數據庫的內容,我想基本上識別哪個號碼分配給條目的id列。也許讓PHP腳本以某種方式檢查現有的id數據的最高值並將傳入數據的id分配給比存在的值高一個值會更聰明些? – 2010-02-19 01:22:32

回答

2

我建議你AUTO_INCREMENT已經就位創建表。你可以爲auto_inc列指定一個值,並且mysql會使用它,而下一個插入爲auto_inc列指定一個NULL或0值將會神奇地得到$ highest + 1賦值給它。

例如:

mysql> create table foobar (i int auto_increment primary key);

mysql> insert into foobar values (10),(25);

mysql> insert into foobar values (null);

mysql> select * from foobar;

# returns 10,25,26

+0

我的問題,這是一個事實,即使用jQuery UI如果我重新提交數據庫條目進行排序的時候,我得到錯誤「key 1的重複條目0」...這是因爲在嘗試重新定義每個條目的id值時,它會運行提交前存在的條目的值。你能想到解決這個問題的方法嗎? – 2010-02-19 01:48:16

0

您可以使用mysql控制檯界面或使用phpmyadmin(最簡單)通過php發出的查詢來更改該查詢。

ALTER TABLE table_name CHANGE old_column_name new_column_name column_definition; 
ALTER TABLE table_name AUTO_INCREMENT = highest_current_index + 1 

column_definiton:

old_column_definition AUTO_INCREMENT 

更多信息:

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

http://dev.mysql.com/doc/refman/5.1/en/create-table.html

編輯 始終使用mysql_insert_id或抽象層的相關函數獲取最後創建的ID,因爲LAST_INSERT_ID可能導致錯誤的結果。

0

您可以切換到MySQL的AUTO_INCREMENT實現,但它會採取3個查詢做到這一點:

一)ALTER TABLE到AUTO_INCREMENT添加到字段中的問題

B)SELECT MAX(id) + 1找出你需要把ID設爲

C)ALTER TABLE table AUTO_INCREMENT =result from (b)

的MySQL認爲改變AUTO_INCREMENT值表級的動作,所以你不能做到這一點(一),並且它不允許你在(c)中做MAX(id),所以3個查詢。

+0

對於如何使用php的mysql_query()來顯示語法,你有什麼建議嗎? – 2010-02-19 01:44:57

0

在MySQL中,您可以爲auto_increment字段設置自定義值。然後,MySQL將爲新行使用最高的auto_increment列值,實質上爲MAX(id)+1。這意味着您可以有效地保留一系列ID以供自定義使用。例如:

CREATE TABLE mytable (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, 
col1 VARCHAR(256) 
); 
ALTER TABLE mytable AUTO_INCREMENT = 5001; 

在此架構中,所有ID爲<的5001都保留供系統使用。所以,你的PHP腳本可以自動生成值:

INSERT INTO mytable SET id = NULL, col1 = 'whatevers2'; 
-- The id of the new row will be 5001 

預留了一系列這樣的:

for ($i=1; $i<=56; $i++) 
mysql_query("INSERT INTO mytable SET id = $i, col1= 'whatevers'"); 

新作品將不指定ID或將其設置爲null,則使用非保留範圍鍵 - 以防將來需要超過56個特殊/系統行。

+0

有趣的解決方案,我可以考慮這樣的事情....雖然這將是很好,沒有限制 – 2010-02-19 01:50:56

1

不,停下來。這不是auto_increment的要點。如果你不打算讓它們按ID排序,那麼不要讓它們成爲auto_increment,只需在表格末尾添加一列以便訂購,並享受它帶給你的增加的靈活性。看起來你試圖將兩組不同的信息打包成一列,儘管這個主題中的所有善意的人都告訴你如何着手打擊自己,但它真的只會咬你一口。

+0

我將讓他們通過ID排序....我只是想,要通過我的PHP腳本進行初始定製的ID號碼,然後,如果我插入一個條目,MySQL的彌補了就離開編號PHP腳本 – 2010-02-19 02:25:23