我有两张桌子。Person
和Phones
。许多电话号码可以通过外键与一个人相关联。如果我想添加一个电话号码并将其映射到特定的人,我的 SQL 应该是什么样子?
据我了解:
SQL 语句应该是事务性的,因此首先我必须将人员插入
Person
表中,然后在插入电话号码Phones
并将其映射到表中刚刚插入的行Person
。如果行已经存在于另一个表中怎么办?我应该如何处理?
我正在寻找一个干净简单的解决方案或 sql 示例。
注意:我无权创建存储过程。
我有两张桌子。Person
和Phones
。许多电话号码可以通过外键与一个人相关联。如果我想添加一个电话号码并将其映射到特定的人,我的 SQL 应该是什么样子?
据我了解:
SQL 语句应该是事务性的,因此首先我必须将人员插入Person
表中,然后在插入电话号码Phones
并将其映射到表中刚刚插入的行Person
。
如果行已经存在于另一个表中怎么办?我应该如何处理?
我正在寻找一个干净简单的解决方案或 sql 示例。
注意:我无权创建存储过程。
如果你Person
用 new Phone
s 插入一个新的,那么你会
Person
表中。LAST_INSERT_ID()
获取刚刚在该插入上生成的 ID。Phone
表中。如果您要Phone
为现有的 s 插入新的 s Person
,那么您会
Person
如果您还没有 ID,请选择以获取其 ID
使用该 ID 将记录插入Phone
表中。
如果行已经存在于另一个表中怎么办?我应该如何处理?
在此上下文中定义“已经存在”。什么定义了数据的唯一性?在这种情况下,您可能需要考虑将该唯一性定义合并到该表的主键中。(可以由多个列组成。)否则,您必须SELECT
从表中查看该行是否已存在。如果是,请更新它。如果没有,请插入它。(或者您希望在您的域中以逻辑方式处理已经存在的数据。)
请记住,在这种情况下,很容易过度使用独特性。例如,您可能想尝试在这些表之间创建多对多关系,以避免重复电话号码。在现实世界的场景中,这最终不是一个好主意,因为有可能:
在过度标准化的情况下,上述事件将导致以下情况之一: