2013-08-05 101 views
-2

我有一個字段(ID,品牌,型號,OS) id作爲主鍵添加主鍵

表一表中重複值有〜6000行

現在我想添加新的字段ID = 4012(已經存在)&增量ID + +的ID> 4012

最愚蠢的方式:

  1. 化妝表備份

  2. 與ID刪除條目> = 4012

  3. 插入新的id爲項= 4012

  4. 從備份

愚蠢恢復表,但工程))

尋找更美的解決方案 Thx

表結構:

CREATE TABLE IF NOT EXISTS `mobileslist` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `brand` text NOT NULL, 
    `model` text NOT NULL, 
    `os` text NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=14823 ; 

我嘗試:

UPDATE mobileslist集ID = ID + 1 WHERE ID IN(SELECT ID FROM mobileslist WHERE ID> = 4822 ORDER BY ID);

但得到的回答是:

1093 - 您不能指定目標表 'mobileslist' 的更新在FROM子句

+0

爲什麼你需要這個而不是使用默認的主鍵值? – Malkus

+2

這聽起來像一個糟糕的數據庫設計。你能給我們更多的背景。 –

+0

只需要插入一個品牌 – user2514964

回答

0

希望我的理解是正確的,你要插入一個在位置4012處移動的新條目&重新分配ID = 4012或更多的所有條目,新ID增加1. 希望這會有所幫助。

試試這個:

UPDATE <TableName> 
SET 
    id = id + 1 
WHERE id IN (SELECT id FROM <TableName> WHERE id >= 4012 ORDER BY id) 

INSERT INTO <TableName> 
    (id , brand, model , os) 
VALUE 
    (4012, "<BrandName>", "<Model>", "<OS>") 

更新答:

DECLARE @MaxId INT, @Difference INT 
SELECT 
    @MaxId = MAX(id) 
FROM mobileslist 

SET @Difference = @MaxId - 4012 

UPDATE mobileslist 
SET 
id = id + @Difference 
where id >= 4012 

INSERT INTO mobileslist 
    (id , brand, model , os) 
VALUE 
    (4012, "TestBrand", "TestModel", "TestOS") 

UPDATE mobileslist 
SET 
id = id - @Difference 
where id > 4012 
+0

#1062的位置固定 – user2514964

+0

請更新 解決 –

+0

#1093 - 您不能指定目標在FROM子句中更新表'mobileslist' – user2514964

0

1)創建一個臨時表,通過ID降序排列。
2)對設置ID = ID + 1的臨時表執行UPDATE查詢WHERE ID> = 4012
3)刪除臨時表
4)對原始表執行插入操作。