插入另一列时重复 AUTO_INCREMENT Id?

Posted

技术标签:

【中文标题】插入另一列时重复 AUTO_INCREMENT Id?【英文标题】:Duplicate AUTO_INCREMENT Id upon insertion into another column? 【发布时间】:2019-01-08 00:10:57 【问题描述】:

假设我有这个表结构:

CREATE TABLE bananas (
    id    INT AUTO_INCREMENT PRIMARY KEY,
    name  CHAR(127),
    order INT
);

我希望行的初始 order 字段与插入顺序匹配,所以 order == id

现在我可以使用一些虚拟值进行插入,检查它得到的 ID,然后更新行,但这似乎很愚蠢。 如何在插入时发生这种情况?

INSERT INTO bananas (name, order) VALUES ($name, ???);

【问题讨论】:

如果order 总是与id 具有相同的值,为什么需要它? @Nick 初始值相同,但以后可能会改变 【参考方案1】:

在运行INSERT 后,您可以立即使用function LAST_INSERT_ID 恢复最后成功插入记录的id 并运行UPDATE 查询:

INSERT INTO bananas (name, ord) values ('foo', 100);
UPDATE bananas SET ord = LAST_INSERT_ID() WHERE id = LAST_INSERT_ID();

This DB fiddle 演示了它是如何工作的。

PS : 列名 order 与相应的 SQL 关键字冲突,我在代码中重命名了该列 ord

【讨论】:

以上是关于插入另一列时重复 AUTO_INCREMENT Id?的主要内容,如果未能解决你的问题,请参考以下文章

触发器 - 如何在更新另一列时更改另一列 - MySQL

更新另一列时自动更新sql列

更新另一列时,使用列名作为 PL/SQL 关联数组的键

当您需要基于另一列更新列时,在 Pandas 中循环的替代方法

当用户在 MS Access 中修改表中的另一列时,如何在 SQL Server 中将列设置为今天的日期 [关闭]

熊猫数据框在更改一列时每行重复 5 次