【问题标题】:Is there a way to emulate auto_increment on a second column in MySQL?有没有办法在 MySQL 的第二列上模拟 auto_increment?
【发布时间】:2009-10-07 20:14:23
【问题描述】:

我认为这比我上一个版本更清楚:

我有一个表,它已经有一个以 1 开头的 PK 字段,该字段已设置为自动递增。我想添加一个不以 1 开头的新字段,而是以任意数字开头(想想发票编号),并且还会自动递增。显然,每个具有该属性的表只能有一个 col。有没有办法在一个查询操作中强制 MySQL 将该字段的最后一个(或最大值)值增加 1 作为新行中该 col 的值?

更新:我刚刚使用 id 列作为我需要的新值的基础,并删除了非必要的列。真的,我的问题从未得到回答,但我确实将此作为重新考虑方法的提示,非常感谢!

【问题讨论】:

  • 您是否希望此列始终与主键具有相同的值?
  • 呃,除非你想玩增量量或偏移量,否则它们的值不一样吗?
  • 我试图添加的新字段不是从 1 开始,而是某种特定的方案。所以,不,它们不会有相同的价值。一个是表的内部记账,一个是业务逻辑。
  • 但它们的差异是恒定的。这样一个额外的专栏有什么好处?

标签: mysql insert auto-increment


【解决方案1】:

这并不是对您的特定问题的真正答案(因为您询问如何在一个 SQL 语句中实现您的目标),但您可以通过调用序列生成来在填充第二列的表上定义一个触发器功能。这将确保该列的值是真正唯一的(如果您正在执行 max(value) 或类似操作,则情况并非如此),因为对该函数的调用将被排队。

或者,如果您确实需要显示相同值的两列,请创建一个使用不同别名两次引用同一列的视图。

【讨论】:

    【解决方案2】:

    让两列具有相同的值似乎很愚蠢,但是你去吧。

    create trigger foo_before_insert 
      before insert on my_table
      for each row set
      new.second_auto_column = first_auto_column
    ;
    

    【讨论】:

      【解决方案3】:

      如果它在同一个表中,您可以将您想要的列设置为您的唯一列,但它们将具有相同的值,这似乎毫无意义>您确定需要这个吗?

      【讨论】:

        【解决方案4】:

        如果您能告诉我们该字段的用途,这将更容易回答。通常有更好的方法来实现相同的业务需求。无论您做什么都将是一种黑客行为,并且您最终会花费大量时间来处理意想不到的后果。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-28
          • 1970-01-01
          • 1970-01-01
          • 2011-04-21
          • 2023-04-03
          • 1970-01-01
          • 2011-07-24
          相关资源
          最近更新 更多