2010-04-29 73 views
4

所以此工程...設置AUTO_INCREMENT值編程

ALTER TABLE variation AUTO_INCREMENT = 10; 

但我想這樣做;

ALTER TABLE variation AUTO_INCREMENT = (SELECT MAX(id)+1 FROM old_db.varaition); 

但這並不奏效,也沒有;

SELECT MAX(id)+1 INTO @old_auto_inc FROM old_db.variation 
ALTER TABLE variation AUTO_INCREMENT = @old_auto_inc; 

所以沒有人知道如何做到這一點?

(我想確保AUTO_INCREMENT鍵不舊的和新的站點之間的碰撞,需要自動執行此操作。這樣我就可以運行一個腳本時,新的數據庫上線)

回答

0

我不不知道這是否是一個好主意,但是可以用服務器端語言進行2次查詢嗎,例如PHP?

$incrementStep = Db::query('SELECT MAX(id)+1 FROM old_db.varaition'); 

Db::query('ALTER TABLE variation AUTO_INCREMENT = ' . (int) $incrementStep); 

假設​​是返回正是你想要的每一次:)

+0

Yep希望能在SQL中做到這一切,但它看起來像我需要做類似上述的事情。 – Tim 2010-04-30 00:53:30

1

我不使用MySQL的給出一個具體的答案非常熟悉,一個神奇的查詢方法。但是,在其他數據庫引擎中,您可以將EXEC方法傳遞給將執行的字符串。您只需編寫一個腳本來確定auto_increment所需的值,然後將該值作爲字符串插入到EXEC'd腳本中。基本上寫一個寫第二個腳本並運行它的腳本。

編輯:看起來像你想要一個準備好的聲明。搜索'動態SQL'有一個幾乎重複here

編輯2:蒂姆,編號this鏈接引用在幾乎重複StackOverflow後發出的帖子。在頁面上搜索字符串'使用參數',你就會得到它的骨感。 MySql顯然有點困難。在MSSqlServer 2000中,這是一個微不足道的過程。 Here是另一篇有關mysql動態sql的文章

+0

好主意,但似乎mysql不喜歡它 mysql> PREPARE stmt FROM'ALTER TABLE variation AUTO_INCREMENT =?'; 錯誤1064(42000):您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,在'?'附近使用正確的語法。在第1行 – Tim 2010-04-30 00:50:25

1

設置你的auto_increment爲1,零不起作用,mysql自動設置最大值爲下一個值爲索引值。

ALTER TABLE table AUTO_INCREMENT = 1 
相關問題