0

编辑:

我想将 id 更新为新创建的自动增量 id,行的其余列不会改变。

原来的:

我在 mysql 中有一个表,如下所示:

id    userId    productId

所有列都是 UBIGINT,id 是 PRIMARY KEY,设置为 AUTO INCREMENT。

所以现在我想在同一个表中重新插入一行,但使用新创建的 id。并且应该删除旧行!

我正在使用 id 进行订单(更高 == 更新)。

这可能吗,因为另一个选项是添加时间戳列并更新此列,但我不会使用时间戳。所以我想不惜一切代价阻止这种情况。

4

3 回答 3

2
INSERT INTO table (userId, productId) VALUES
(SELECT userId, productId FROM table WHERE id=[id of row]);
DELETE FROM table WHERE id=[id of row];
于 2013-07-17T17:50:21.530 回答
2

假设我们有下表

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”-row,这个查询将在最后一次插入之后更新它的 id 为相等

在你的情况下

insert into table (userId, productId) values (someUserId, someProductId)
on duplicate key update id=last_insert_id()+1;

此外,还有replaceMySQL 扩展。

replace into table (userId, productId) values (someUserId, someProductId);

作为一个只有当你的表有或约束on duplicate key update时它才会起作用。不像将首先删除现有行然后插入新行,而只会更新它。uniqueprimary keyon duplicate key update replaceon duplicate key update

于 2013-07-17T17:51:59.163 回答
0

是的,有可能。您只需删除旧记录并添加另一条记录。但是你必须知道 auto_increment 会一直增长。

于 2013-07-17T17:51:32.903 回答