我有一个包含字段的表(id,brand,model,os) id为主键
表有~6000行
现在我要添加id = 4012(已经存在)的新字段&为id> 4012
增加id ++ 最愚蠢的方式:制作表格备份
删除ID为> = 4012
插入id = 4012
从备份恢复表
愚蠢,但有效))
寻找更美丽的解决方案 谢谢
表格结构:
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'
答案 0 :(得分: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
答案 1 :(得分:0)
1)创建一个临时表,按ID降序排列
2)对临时表执行UPDATE查询,该临时表设置ID = ID + 1 WHERE ID&gt; = 4012
3)放下临时表
4)在原始表上执行插入操作。