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