mysql - 我可以使用新创建的 auto_increment 主键重新插入一行吗

标签 mysql

编辑:

我想将 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);

作为重复键更新,它仅在您的表具有uniqueprimary key 约束时才有效。 不同于 on duplicate key update replace 将首先删除现有行然后插入新行,而 on duplicate key update 只会更新它。

关于mysql - 我可以使用新创建的 auto_increment 主键重新插入一行吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17706574/

相关文章:

mysql - 如何在MySQL上调用存储过程并一次选择返回值

mysql - TokuDB size_allocated 与 size_in_use

mysql - Ruby on Rails/Active Record/MYSQL - 按字符串属性分组和排序

mysql - 令人费解的查询性能结果

mysql - 当 MySQL 返回空结果集时返回 NULL 值

MySQL:计算具有条件值的行

php - 如何从包含angularjs中json数组的json对象中获取特定值

python - 使用 mysql 创建的表,但我无法使用 python 从它中进行选择

python - pre-commit 测试应该使用大数据集并在查询时间过长时失败,还是应该使用小型测试数据库?

java - Gobblin:java.lang.ClassNotFoundException:org.apache.gobblin.source.extractor.extract.jdbc.MysqlSource