-2

我有一个表,其中字段(id、brand、model、os)id 作为主键

表有 ~ 6000 行

现在我想添加 id=4012 的新字段(已经存在)并为 id>4012 增加 id++

最愚蠢的方式:

  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 SET id = id + 1 WHERE id IN (SELECT id FROM mobileslist WHERE id >= 4822 ORDER BY id);

但得到了答案:

1093 - 您不能在 FROM 子句中指定目标表 'mobileslist' 进行更新

4

2 回答 2

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
于 2013-08-05T14:08:00.140 回答
0

1)创建一个临时表,按ID降序排列。
2) 对设置 ID = ID + 1 WHERE ID >= 4012 的临时表执行 UPDATE 查询
3) 删除临时表
4) 对原始表执行插入操作。

于 2013-08-05T14:16:32.723 回答