gpt4 book ai didi

mysql - 带条件的 SQL 自动增量

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:29 24 4
gpt4 key购买 nike

我是 SQL 的新手,曾尝试用谷歌搜索这个问题的答案,但没有成功。

我有以下表格(简体):

Table1: Transaction
Columns: idTransaction, fkWorker

Table2: Worker
Columns: idWorker (Primary Key, Unique), FirstName, Wage

[fkWorker is linked to idWorker]

我希望能够在同一个事务下将 1 个以上的工作人员分组,但让每个工作人员在他自己的行中。

E.g.:
[TRANSACTION TABLE]
[IDTRANSACTION][FKWORKER]

|1 ||Worker3 |

|1 ||Worker4 |

|2 ||Worker3 |

|2 ||Worker4 |

|2 ||Worker1 |

|3 ||Worker1 |

是否可以使用自动增量执行此操作,但在特定项目的所有工作人员都已添加到表中之前它不会添加到事务 ID?我探索了为工作人员外键添加多列的选项,例如。 fkWorker1、fkWorker2、fkWorker3 等。然而,对于大量的 worker,它变得乏味。

提前谢谢你,

格言

最佳答案

简短的回答是否定的,不可能在 Transaction 表的 idTransaction 上使用 AUTO_INCREMENT 属性来实现结果你想要的。

较长的答案是,这是可能的,可以完成,但实现该工作的 SQL 会很笨拙。

更直接的方法是将当前的 Transaction 表“拆分”为两个表:TransactionTransactionWorker

您当前的表实际上是 TransactionWorker 表。此表中的一行表示 WorkerTransaction 之间的关系。一个Transaction可以关联多个Worker,一个Worker可以关联多个Transaction .

新的 Transaction 表中的一行正好代表一个实体。您可以使用 AUTO_INCREMENT id 为该表中的行分配唯一的 id。

对于那个 TransactionWorker 表,我们通常选择一个名称,以某种方式表明它是一个关系表。此表中的一行与一个 Transaction 和一个 Worker 关联或相关。


TABLE: Transaction
idTransaction INT NOT NULL AUTO_INCREMENT PRIMARY KEY

TABLE: TransactionWorker
fkTransaction INT NOT NULL
fkWorker INT NOT NULL

TABLE: Worker
idWorker INT NOT NULL PRIMARY KEY

(在某些情况下,我们可以为关系表找到不同的名称,例如 MemberMembershipPerson 之间的关系和 Group

您可以向 Transaction 表插入一行,并允许 AUTO_INCREMENT 修饰符生成 id 列。

Transaction 表中插入一行后,您可以使用 LAST_INSERT_ID() 函数检索最后生成的 AUTO_INCREMENT 值(在同一个数据库 session )。

然后您可以在后续插入 TransactionWorker 表时使用该检索到的值。

这是解决此类问题的规范模式。

关于mysql - 带条件的 SQL 自动增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16950663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com