Mysql 所有列值都将被删除
现在,Mysql 所有列值都将被删除,mysql,database,Mysql,Database,现在,TableId\u int列中1000条记录的值相同,等于1 当我在MYSQL工作台编辑器中同时运行以下三条SQL语句时 针对数据库“Mydb”和表“Mytable” 除列TableId\u int中的记录外,所有记录都将被删除。我可以看到 列TableId\u int中的值,从1到1000,用于1000条记录,但不包括所有其他记录 列值被删除并且为空,这是我不希望看到的。我想保留所有其他的 列值保持不变 请让我知道我做错了什么 我的回答是指以下内容。在那里,人们建议 将TableId\u
TableId\u int
列中1000条记录的值相同,等于1
当我在MYSQL工作台编辑器中同时运行以下三条SQL语句时
针对数据库“Mydb”和表“Mytable”
除列TableId\u int
中的记录外,所有记录都将被删除。我可以看到
列TableId\u int
中的值,从1
到1000
,用于1000条记录,但不包括所有其他记录
列值被删除并且为空,这是我不希望看到的。我想保留所有其他的
列值保持不变
请让我知道我做错了什么
我的回答是指以下内容。在那里,人们建议
将TableId\u int
设置为自动递增键是最好的选择,但我已经有了另一个选项
表列设置为主键并自动递增,因此MySQL不允许设置
另一个自动增量
请告诉我该怎么办
谢谢是,
REPLACE
执行删除
,然后执行插入
。如果不为其他列指定值,则插入部分无法推断它们的值,并且除了主键之外,它不会使用以前的值
我假设TableId\u int
是主键或唯一键,这意味着将替换具有相同值的现有行。即先删除,然后插入
您只需使用更新
即可:
UPDATE (SELECT @a:=0) A, Mydb.Mytable B SET B.TableId_int = (@a:=@a+1);
但我必须指出,看起来您正在尝试将主键值重新编号为连续的。不建议这样做,也没有必要这样做。自动递增主键值需要唯一,但不需要连续。它们不是行号,它们只标识每一行。存在删除、回滚、插入失败等漏洞是正常的。
TableId\u int
不是主键。它的数据类型是int(20)UN
。
UPDATE (SELECT @a:=0) A, Mydb.Mytable B SET B.TableId_int = (@a:=@a+1);