目前,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
中的值从1
到1000
从1000条记录开始,但是所有其他值
列值被删除并且为空,这是我不想要的。我想保留所有其他
列值完好无损。
请让我知道我做错了什么。
我指的是SO post以下的答案。在那里,人们建议,那
将TableId_int
设置为自动增量键是最佳选择,但我已经有了另一个
表列设置为主键和自动增量,因此MySQL不允许我设置
另一个自动增量。
请告知我该怎么做。
谢谢
答案 0 :(得分:1)
是的,REPLACE
执行DELETE
后跟INSERT
。如果您没有为其他列指定值,则INSERT
部分无法推断其值,并且除了主键之外,它不会使用之前的值。
我认为TableId_int
是主键或唯一键,这意味着具有相同值的现有行将被替换。也就是说,删除然后插入。
您只需使用UPDATE
即可:
UPDATE (SELECT @a:=0) A, Mydb.Mytable B SET B.TableId_int = (@a:=@a+1);
但我必须发表评论,看起来您正在尝试将主键值重新编号为连续值。这不是推荐的,也不是必要的。自动递增主键值必须唯一,但它们不需要是连续的。它们不是行号,它们只标识每一行。从删除,回滚,插入失败等方面出现间隙是正常的。