【问题标题】:MySQL Auto Increment Based on Foreign KeyMySQL 基于外键的自增
【发布时间】:2011-04-06 00:39:01
【问题描述】:

假设我有一个名为 assets 的下表,其中包含以下字段:

id | job_id | title

我想使用 id 和 job_id 作为主键。 job_id 是外键。 id 字段是自动递增的。 如果没有具有相同 job_id 的行,我将如何让 id 从 0 开始递增。 如果有一行具有相同的 job_id 则将 id 增加 1 等等?

我正在寻找的结果是一个如下所示的表格:

id | job_id | title
0     1        hi
1     1        hello
2     1        goodbye
0     2        hi
1     2        hello

现在假设添加了一个 job_id = 3 的新行。 id 字段应该再次从 0 开始自动递增。

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    如果您使用 MyISAM 存储引擎,多列主键中的自增列会从非自增列中的每个新值重新开始。

    http://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html

    【讨论】:

    • 是的,这就是我要找的!这仅在 MyISAM 中支持吗?我正在使用 InnoDB。
    • 是的,它只是 MyISAM。奇怪的是,当您将自增列放入复合主键时,InnoDB 有不同的规则和不同的行为。见dev.mysql.com/doc/refman/5.1/en/…
    【解决方案2】:

    如果您的意思是特别从零开始,the documentation 表示 auto_increment 设计为从 1 开始。但是,“如果启用了 NO_AUTO_VALUE_ON_ZERO SQL 模式,则可以在 AUTO_INCREMENT 列中将 0 存储为 0,而无需生成新的序列值。”

    如果您打算回收表格中不再使用的数字,如果删除的数字是使用的最高数字,这应该会自动发生。

    【讨论】:

    • 我并不特别需要计数器从 0 开始。这只是一个示例。我想让计数器循环使用新的 job_id 插入的每个新行。如果我们回到开篇中的示例,如果将一个 job_id 等于 3 的新行添加到表中,则 id 列将再次从 0 开始递增。
    猜你喜欢
    • 2013-11-16
    • 2012-02-15
    • 2017-05-11
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    相关资源
    最近更新 更多