【问题标题】:How to auto increment on different foreign keys? [duplicate]如何在不同的外键上自动递增? [复制]
【发布时间】:2014-07-01 16:07:46
【问题描述】:

假设我有 2 个 SQL 表(表 1、表 2)。表 1 具有唯一 ID。表 2 具有表 1 id 的外键。

如何根据该 ID 递增。

例子:

Table 1     Table 2 
 ID           foreign key ID
 1            1           1
 2            1           2
 3            2           1
 4            2           2
              2           3
              3           1
              3           2
              3           3
etc..

基本上,创建表的 sql 语法是什么?

【问题讨论】:

  • 你想达到什么目的?为什么?
  • 我不明白你为什么想要这个。你几乎肯定在滥用什么东西。
  • 嗯?你的意思是?这只是一些很好的功能。基本上可以说你有一张学校的桌子和一张学生的桌子。 1 所学校拥有该特定学校的唯一 ID 的学生数量。所以来自学校 1 的学生 1 与来自学校 2 的学生 1 不同。基本上只是重用索引孩子的一种方式(对于这个例子);
  • 公认的做法(被比你我聪明的人所接受)不是这样做的; Table2 的 ID 应该是唯一的,而不是相对于 Table1 的 ID 唯一的(各种原因,从可读性和简单性到性能和可索引性)。如果你真的必须这样做,你将需要一个触发器和一个聪明的函数。这不是 mysql 的内置功能。
  • 另一个常见的应用是发票上的 lineItemNumber,其中(按照惯例),单独的表用于 Invoice LineItems(InvoiceId、LineItemNumber、productId、Quantity、UnitPrice),其中 PK 是( InvoiceId, LineItemNumber)

标签: mysql sql


【解决方案1】:

您不能通过表格自动增量来做到这一点。但是您可以使用触发器来创建这些 ID。

参见示例:

【讨论】:

  • 实际上您可以(通过自动增量执行此操作)但只能在 MyISAM 表上。
【解决方案2】:

您也可以在插入上执行此操作,如下所示:

Insert Table2(ForeignKey, Id)
Select @ForeignKey, 1 + Coalesce(max(Id), 0)
from table2
Where ForeignKey = @ForeignKey

【讨论】:

  • 如果可以的话,我会赞成这个
猜你喜欢
  • 2016-04-22
  • 2016-09-06
  • 2015-06-08
  • 1970-01-01
  • 2023-03-26
  • 2011-03-07
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多