【问题标题】:Auto-increment field that resets after a change in another column MYSQL在另一列MYSQL中更改后重置的自动增量字段
【发布时间】:2016-02-04 09:32:03
【问题描述】:

您能否提供一个非常简单的 MYSQL 示例,说明如何创建一个自动递增的“计数”或“订单”字段,但在每次更改不同字段后重新启动?在下表中,每次“餐食”字段发生变化时,“订单”字段将从“1”重新开始。谢谢。

用餐时间顺序

午餐 10:30 1

午餐 11:00 2

午餐 11:15 3

晚餐 4:30 1

晚餐 4:45 2

晚餐 5:00 3

晚餐 5:30 4

【问题讨论】:

  • 你能说得更具体点吗?您的描述令人困惑。
  • 我看不懂你的表,你能把它描述得更清楚吗?你可以在这里找到答案,dev.mysql.com/doc/refman/5.7/en/counting-rows.html
  • 我想在 MYSQL 中做什么,在 microsoft sql server 上使用这个语句:select row_number() over (partition by Meal order by Time) , * from YourTable
  • 我的问题是在 mySQL 中这样做
  • 检查此链接以更好地了解问题。它有一个解决方案,但我无法在 mysql link 上复制它

标签: mysql sql-order-by partitioning


【解决方案1】:

自动增量始终针对每个表,您不能使其特定于某些列或索引。

如果您想要每列自动递增 id,则需要手动进行。 IE。插入新项目时,通过select MAX(id) FROM ... WHERE name = 'Dinner'选择最大的id,然后插入maximum+1

要在某些报告中的 Select 语句中执行此操作,您需要通过会话变量和 case 语句来实现它。见this tutorial

【讨论】:

  • 我想在 MYSQL 中做什么,在 microsoft sql server 上使用这个语句:select row_number() over (partition by Meal order by Time) , * from YourTable
  • 我的问题是在 mysql 上这样做
  • @Manuel Morgado :我不清楚原始问题。查看更新的答案,中间有很清楚的例子。
【解决方案2】:

该功能在 MyISAM 引擎中可用,但在 InnoDB 中不可用。它可以被模拟。请参阅MyISAM to InnoDB 并搜索“abc”。这是它的要点:

  BEGIN;
  SELECT @id := IFNULL(MAX(id),0) + 1 FROM foo WHERE other = 123 FOR UPDATE;
  INSERT INTO foo
     (other, id, ...)
     VALUES
     (123, @id, ...);
  COMMIT;

【讨论】:

    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2015-09-30
    相关资源
    最近更新 更多