2012-05-16 87 views
1

我之前的開發人員創建了名爲「Tools」的數據庫表,它包含兩個字段,toolid - varchar(255)和toolname - varchar(100) 。將設置爲varchar的主鍵字段轉換爲int字段

toolid字段的類型是varchar,它是主鍵。表中有數據。

我想將varchar toolid字段轉換爲int類型,同時將數據保存在其鍵中,同時我希望該字段爲自動增量。

目前的關鍵是數字,比如12或22或3

最新最好的方式做到這一點?

+0

我不確定,但我認爲mysql可以自動處理,只需更改列類型並添加auto_increment。 – bfavaretto

+0

我試過這個使用MySQL工作臺創建的「ALTER TABLE'hostidtoolsorg'.'tool' CHANGE COLUMN'toolid'' toolid' INT NOT NULL AUTO_INCREMENT;」,但拋出一個錯誤。 –

+0

我剛剛嘗試過使用PhpMyAdmin,它工作。儘量不要在同一個操作中添加auto_increment – bfavaretto

回答

0

嘗試這三個獨立的命令:

ALTER TABLE `Tools` CHANGE `toolid` `toolid` INT(11) NOT NULL; 
ALTER TABLE `Tools` ADD PRIMARY KEY (`toolid`); 
ALTER TABLE `Tools` CHANGE `toolid` `toolid` INT(11) NOT NULL AUTO_INCREMENT; 

如果您需要調整AUTO_INCREMENT值:

ALTER TABLE `Tools` AUTO_INCREMENT = 10 
+0

這將啓動自動增量值爲0,這將是一個問題。 – Ilion

+0

會嗎?它在我的測試中自動調整。通過我添加了一個查詢,以防萬一。 – bfavaretto

+0

有可能我在舊版本的MySQL中遇到過這個問題,並且這個問題已經被解決了。 :) – Ilion

0

如果它不將其作爲主鍵:

alter table tools add primary key (toolid); 

將自動增量值設置爲您想要的下一個值(比當前值高1:

alter table tools AUTO_INCREMENT=[value]; 

更改表定義:

Alter Table Tools Change Column toolid toolid integer NOT NULL AUTO_INCREMENT; 
0

它被設置爲一個主鍵,解決這個問題的唯一方法是:使用

SQL Server和上升到類似數據庫選項卡歸結爲選項或首選項或其他內容:從那裏您可以告訴數據庫更新所有其他表中的主鍵,並使用GUI更改數據類型。您必須確保首先選擇該選項,否則將無法保存更改。

無論主鍵與數據類型相關的表是否需要更改。

所以,如果你改變表格工具,你將不得不改變它鏈接到的表格,如果是這樣的話。

您可能需要刪除並重新創建表格,在這種情況下,您可以使用任何編輯器輕鬆完成此操作。 您可以實際使用IDENTITY(1,1)函數爲每個工具ID創建唯一標識符。

如果你想保持相同的toolID你就必須創建具有正確的列限制的新表,按升序或類似的東西運行的INSERT INTO語句填充表...

2

如果只想將varchar字段更改爲int字段,但由於數據類型不匹配,當然不會讓您,但是,一個非常簡單的修復方法是:

創建第二個表,它將包含所有從你的主要領域。

CREATE TABLE `Tools2` SELECT * FROM `Tools`; 

清空數據,因爲我們需要將工具名稱從varchar更改爲int,並且在完整時無法完成此操作。

TRUNCATE TABLE `Tools2`; 

好的,讓我們改變字段類型。

ALTER TABLE `Tools2` CHANGE `toolname` `toolname` INT(11) NOT NULL; 

現在讓我們重新插入原始表中的數據。

INSERT INTO `Tools2` SELECT * FROM `Tools`; 

Tools2現在是Tools的正確版本,所以刪除Tools。

DROP TABLE `Tools`; 

最後,將Tools2重命名爲Tools,以便您可以輕鬆前往。

RENAME TABLE `Tools2` TO `Tools`;