2011-02-03 54 views
0

我有大約500個記錄的MySQL表,並且我按照我的requiremens修改了我的表。然而,我有一個表像字段(sale_id,cust_id,Sales_desc bla bla)如何更新MySQL表,我想重新生成現有表的序列號

我已經爲所有500rows ,,,,,,做了一個值('1')的sale_id行,但是我想知道從你們,可以任何一個告訴我如何更新sale_id與1至500 ,,,,,我的意思是說,我想這行應該從1開始到N ,,,,,但這裏已經有一些數據了, ,,,我只是想用序列號替換現有的sale_id值(1,2,3,4,5 .... n) plz幫我解決這個問題...我在等待....

shahid emsoftware.in

+0

您使用與您的數據庫進行交互什麼服務器端語言? – Serge 2011-02-03 18:09:18

+0

我正在使用PHP和Mysql ... – user2454281 2011-02-03 18:13:43

+0

我發現這個:http://www.kbedell.com/2009/03/02/a-simple-example-of-a-mysql-stored-procedure-that-uses -a-cursor/ 我希望你覺得它有幫助;這是一個全SQL解決方案。 – nesv 2011-02-03 18:18:00

回答

1

聽起來像你的表中的sale_id應該是表上的主鍵,被設置爲自動增量。既然它聽起來好像表中已經沒有太多的數據了,爲什麼不用sale_id設置重新創建它來處理這個問題,將數據插入到新表中,然後重新命名這些表以彌補它們?

CREATE TABLE `TableNew` LIKE `TableOld`; 
ALTER TABLE `TableNew` MODIFY COLUMN `sale_id` INTEGER NOT NULL DEFAULT 0 AUTO_INCREMENT; 
INSERT IGNORE INTO `TableNew` (cust_id, Sales_desc, bla, bla) SELECT cust_id, Sales_desc, bla, bla FROM `TableOld`; 
RENAME TABLE `TableOld` to `TableOldBackup`; 
RENAME TABLE `TableNew` to `TableOld`; 

注:在這個答案中給出的插入語句,必須指定所有的字段被複制,並從插入排除sale_id。這樣mysql將使用自動遞增的值填充sale_id。

3

這可能做的伎倆:

UPDATE tableName, (SELECT @id := 0) dm 
SET sale_id = (@id := @id + 1)