【问题标题】:Insert a row to some tables with same id在一些具有相同 id 的表中插入一行
【发布时间】:2015-06-11 10:05:44
【问题描述】:

我需要向多个表中插入一个实体。表中的行数不相等,但我需要通过其 id 从所有表中获取该实体。在 oracle 中,我们可以对所有这些表使用相同的序列,但是在 mysql 中我们可以做些什么来做这样的事情呢? (我不能使用外键或使用最后插入的 id,因为每个实体在某些表中插入行,而不是所有表,并且插入它们没有顺序。) 像这样的:

实体:

E1: a1,a2,a3,a4,a5,a6

E2:b1,b2,b3,b4,b5

E3:c1,c2,c3,c4,c5

E4:d1,d2,d3,d4,d5,d6

表1:

  Id  | col1 | col2
   5    a1      a2
   3    c1      c2

表2:

 Id  | col1 | col2
  1     b3     b4
  4     d3     d4
  5     a3     a4

表3:

  Id  | col1 | col2
   4     b5     b6
   5     a5     a6

然后我可以加入表并通过 id=5 获取 E1

【问题讨论】:

    标签: mysql database auto-increment


    【解决方案1】:

    您可以使用“辅助键”作为 InsertID 或类似的东西,然后通过它来获取。这样您就不会弄乱主键 (Id) 的 AI。

    在插入的情况下,您可以从所有表中获取最高的 InsertID,并为当前插入手动递增,因此它将是连续且不同的。

    更新: 其他方法是使用某种关系表。如果表的数量是固定的,您可以使用修复ID | Table1ID | Table2ID | ... 结构,其中 [TableName]ID 是包含实体的表的外键。

    如果表的数量不定,您可以使用如下内容:ID | InsertID | TableID | RowID,其中 InsertID 是插入的标识符(这是您可以在您的情况下查询的 id),TableID 是表标识符和RowID 是给定表中实体的 ID。

    【讨论】:

    • 但是表的数量太多并且可变然后查询最高是复杂和耗时的
    • 那么你可以使用像 ID | 这样的关系表。表1ID |表2ID | ...如果您有固定数量的表或 ID |插入ID |表ID |否则为 RowID 结构。
    • 是的,它有效。我使用带有 lastInsertedId 列的表格,请编辑您的答案,然后我可以接受。
    猜你喜欢
    • 2022-08-03
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    相关资源
    最近更新 更多