【问题标题】:in mysql, how do you put the data from an auto incremented field into another column?在 mysql 中,如何将自动递增字段中的数据放入另一列?
【发布时间】:2013-05-08 06:40:50
【问题描述】:

例如,我有 2 个特定列:id 和 threadId,在某些情况下,我希望 threadId 等于 id(如果它是原始线程),我不确定我将如何处理,因为 id 是自动递增的。

【问题讨论】:

  • 我不知道 mysql 是否有触发器,但如果有,您可以调查该选项。否则我想你需要阅读刚刚插入的记录,获取 id 并更新第二列。
  • 如果threadidNULL 代表它的原始线程,您可能会做得更好。 YMMV。
  • 我不知道 mysql 是这样工作的。从字面上看,它基本上可以将信息上传到自身……令人着迷……测试以确保我的托管允许触发器
  • 达米安,先生,太棒了。
  • 触发器不起作用,因为尚未在 BEFORE 触发器中分配 auto-inc,并且您无法更改 AFTER 触发器中的其他列。请参阅我对stackoverflow.com/questions/1211792/…的回复

标签: mysql sql


【解决方案1】:

您应该能够使用触发器来做到这一点。

使用这篇文章中的信息来帮助你:
Can you access the auto increment value in MySQL within one statement?

在插入之前获取下一个 ID 表单 auto_increment 并将其设置在新字段中。

但这会带来一个问题 - 你说它应该只在“某些情况下”发生。这意味着触发器对您没有好处,因为它每次都会执行(除非您在表中有一些额外的逻辑来允许检查是否应该在触发器中使用 IF 语句设置新字段)。在这种情况下,您唯一的选择是插入该行,获取其新创建的 ID,并在必要时更新它,将另一列设置为该值。

【讨论】:

  • 所有答案实际上都很有帮助,尽管我的解决方案是做一个快速的 sql 查询来获取最后一个 id。我学到了一些触发器,这就是我选择这个答案的原因
【解决方案2】:

Greg 提到您有两个选项 第一个是在表上创建一个触发器,在该特定表上插入后,将字段 ID 更新为与 threadID 相同:

update schema.tablename set threadID = ID;

另一个选项是执行该 sql 本身并更新表。

【讨论】:

    【解决方案3】:

    使用这个查询 INSERT INTO table(id,threadId) VALUES (NULL,(SELECT LAST_INSERT_ID()+1));

    Shamseer PC

    【讨论】:

    • 这通常是不正确的,仅适用于您只有一个客户端向表中插入数据的情况。我会在 INSERT 之后立即执行 UPDATE 并将语句包装在事务中。
    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2021-04-20
    • 2020-01-15
    • 2022-12-03
    相关资源
    最近更新 更多