所有列值都将被删除

时间:2014-04-28 21:51:43

标签: mysql database

目前,TableId_int列的1000条记录具有相同的值,等于1 当我在MYSQL Workbench编辑器中同时运行以下三个SQL语句时 针对数据库" Mydb"和表" Mytable"

update Mydb.Mytable set TableId_int = 0 ; 

REPLACE into Mydb.Mytable(TableId_int)
SELECT @a:=@a+1 AS  TableId_int from(SELECT @a:=0) A ,Mydb.Mytable B;




DELETE from Mydb.Mytable where TableId_int = 0 ;

TableId_int列中的记录外,所有记录都将被删除。我可以看到 列TableId_int中的值从11000从1000条记录开始,但是所有其他值 列值被删除并且为空,这是我不想要的。我想保留所有其他 列值完好无损。

请让我知道我做错了什么。

我指的是SO post以下的答案。在那里,人们建议,那 将TableId_int设置为自动增量键是最佳选择,但我已经有了另一个 表列设置为主键和自动增量,因此MySQL不允许我设置 另一个自动增量。

请告知我该怎么做。

谢谢

1 个答案:

答案 0 :(得分:1)

是的,REPLACE执行DELETE后跟INSERT。如果您没有为其他列指定值,则INSERT部分无法推断其值,并且除了主键之外,它不会使用之前的值。

我认为TableId_int是主键或唯一键,这意味着具有相同值的现有行将被替换。也就是说,删除然后插入。

您只需使用UPDATE即可:

UPDATE (SELECT @a:=0) A, Mydb.Mytable B SET B.TableId_int = (@a:=@a+1);

但我必须发表评论,看起来您正在尝试将主键值重新编号为连续值。这不是推荐的,也不是必要的。自动递增主键值必须唯一,但它们不需要是连续的。它们不是行号,它们只标识每一行。从删除,回​​滚,插入失败等方面出现间隙是正常的。