编辑:
我想将 id 更新为新创建的自动递增 id,该行的其余列不会改变。
原创:
我在 mysql 中有一个表,如下所示:
id userId productId
所有列都是UBIGINT,id是PRIMARY KEY,设置为AUTO INCREMENT。
所以现在我想在同一个表中重新插入一行,但使用新创建的 ID。旧行应该被删除!
我正在使用订单 ID(更高 == 更新)。
这可能吗,因为另一个选项是添加时间戳列并更新此列,但我不会使用时间戳。所以我想不惜一切代价防止这种情况发生。
最佳答案
假设我们有下表
create table so (
`id` int(11) not null auto_increment,
`num` varchar(20) not null, primary key (`id`),
unique (`num`)
) engine=InnoDB default charset=utf8;
然后我们可以使用下面的查询来插入新行
insert into so (num) values ("hi") on duplicate key update id=last_insert_id()+1;
如果已经存在“hi”行,则此查询将更新它的 id 使其在最后插入的下一个相等
在你的情况下
insert into table (userId, productId) values (someUserId, someProductId)
on duplicate key update id=last_insert_id()+1;
此外,还有 replace
MySQL 扩展。
replace into table (userId, productId) values (someUserId, someProductId);
作为重复键更新
,它仅在您的表具有unique
或primary key
约束时才有效。
不同于 on duplicate key update
replace
将首先删除现有行然后插入新行,而 on duplicate key update
只会更新它。
关于mysql - 我可以使用新创建的 auto_increment 主键重新插入一行吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17706574/