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

时间:2013-07-17 17:40:09

标签: mysql

修改

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

ORIGINAL:

我在mysql中有一个表格如下:

id    userId    productId

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

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

我正在使用id作为订单(更高==更新)。

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

3 个答案:

答案 0 :(得分: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];

答案 1 :(得分: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;

此外,还有replace MySQL扩展。

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

作为on duplicate key update,只有当您的表格有uniqueprimary key约束时,它才有效。 与on duplicate key update replace不同,它会首先删除现有行,然后插入新行,而on duplicate key update只会更新它。

答案 2 :(得分:0)

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