为主键添加重复值

时间:2013-08-05 14:04:26

标签: mysql insert key duplicates

我有一个包含字段的表(id,brand,model,os) id为主键

表有~6000行

现在我要添加id = 4012(已经存在)的新字段&为id> 4012

增加id ++ 最愚蠢的方式:

  1. 制作表格备份

  2. 删除ID为> = 4012

  3. 的条目
  4. 插入id = 4012

  5. 的新条目
  6. 从备份恢复表

  7. 愚蠢,但有效))

    寻找更美丽的解决方案 谢谢

    表格结构:

    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'

2 个答案:

答案 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)在原始表上执行插入操作。