簡體   English   中英

將列更改為Auto_Increment

[英]Change Column to Auto_Increment

我今天早些時候問了這個問題,但不確定我是否清楚。

我有一個MySQL欄,里面有序編號為1-56。 這些數字是由我的PHP腳本而不是由auto_increment生成的。

我想做的是在PHP腳本設置正確的數字后使此列自動遞增。 PHP腳本與jQuery界面配合使用,允許我使用jQuery的UI插件對項目列表進行重新排序。

一旦確定了要輸入的順序,我希望將列設置為自動遞增,這樣,如果我要插入一個新條目,它將識別出該列中已經存在的最高編號,並且將其自己的ID號設置為比現有ID號高一個。

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

我建議您使用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

不,停下來 這不是auto_increment的重點。 如果您不打算按ID對它們進行排序,那么就不要對它們進行auto_increment排序,只需在表的末尾添加一列進行排序即可,並享受它賦予您的靈活性。 似乎您正在嘗試將兩套不同的信息打包到一欄中,盡管該線程中所有好心的人都在告訴您如何着手射擊自己,但這實際上只會使您陷入困境。

您可以使用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可能導致錯誤的結果。

您可以將其切換到MySQL的auto_increment實現,但需要3個查詢才能完成:

a) ALTER TABLE將auto_increment添加到相關字段

b) SELECT MAX(id) + 1以找出將ID設置為

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

MySQL考慮將AUTO_INCREMENT值更改為表級操作,因此您無法在(a)中執行此操作,並且不允許在(c)中執行MAX(id) ),因此需要執行3個查詢。

在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;

在此模式中,所有<5001的ID均保留供系統使用。 因此,您的PHP腳本可以自動生成值:

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

新條目將通過不指定id或將其設置為null來使用非保留范圍:

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

保留這樣的范圍是關鍵-如果將來需要超過56個特殊/系統行。

ALTER TABLE <table name> <column name> NOT NULL AUTO_INCREMENT

更多信息: InnoDB中的AUTO_INCREMENT處理

服務器SQL模式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM