首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >合并具有外键的两个数据库时的SQL问题

合并具有外键的两个数据库时的SQL问题
EN

Stack Overflow用户
提问于 2012-04-14 23:50:10
回答 3查看 1.4K关注 0票数 1

我在工作区A和工作区B有一个数据库。在线上有一个这个数据库的副本,它总是从这两个工作区更新。此外,每当另一个工作区做出任何更改时,两个工作区都需要更新其数据库。

一切都运行得很好,但我的问题是:例如,有两个表StockOrders,在Orders中有一列是stock_id

如果工作区A创建具有自动递增的"stock_id"=23的新“股票X”,并且工作区B创建具有自动递增的"stock_id“= 23的新的”股票Y“,则工作区B将添加工作区A的”股票X“,并且工作区B将添加工作区B的”股票Y“,但每个工作区在每个数据库中都具有不同的id。

当工作区A在stock_id=23上订购“股票X”时就会出现问题,当此查询被发送到中央数据库,然后发送到工作区B时,它将插入订单,但stock_id = 23将引用“股票Y”。

我真的很感激在这方面能帮上忙谢谢:)

EN

Stack Overflow用户

发布于 2012-04-15 17:44:18

我想到了这个答案,但我仍然感到困惑,如果它比上面的其他解决方案更好。工作区B中的所有查询都立即在本地数据库上执行,并发送到中央数据库,然后发送到工作区A,但是工作区A上的查询不会立即在本地数据库上执行,它们被发送到中央数据库,然后中央将它们发送到工作区B,当工作区B执行这些查询时,它会通知中央,然后通知工作区A,然后工作区A可以执行存储的查询。因此,允许工作区B正常执行其查询,但是仅当工作区A知道工作区B何时执行了这些查询时,才允许工作区A执行其查询,因为在工作区B执行A的查询之前,它发送自己的新查询,然后执行A的查询,因此在通知A B执行其查询之后,它检查B是否发送了它自己的任何新查询并执行它们,然后它执行它自己的查询。这样,所有自动递增的id在两个工作区中都是相同的。示例:

工作区A:

代码语言:javascript
运行
复制
         q1= insert into stock (name) values ('A')    not executed

         q2= insert into stock (name) values ('B')    not executed

A的数据库:(空)

工作区A将q1和q2发送到中心,并等待中心确认B已执行这些查询,以便它可以自己执行这些查询

工作区B:

代码语言:javascript
运行
复制
         q3= insert into stock (name) values ('C')    executed id=1

         q4= insert into stock (name) values ('D')    executed id=2

数据库B:(1,'C'),(2,'D')

工作区B在将q3和q4发送到中心后,会收到q1和q2的通知。

工作区B执行q1 & q2

代码语言:javascript
运行
复制
          q1= insert into stock (name) values ('A')   executed id=3

          q2= insert into stock (name) values ('B')   executed id=4

数据库B:(1,'C'),(2,'D'),(3,'A'),(4,'B')

工作区A被通知B已经执行了它的q1 & q2,但是它被告知必须先执行q3 & q4,然后才能执行q1 & q2

工作区A:

代码语言:javascript
运行
复制
          q3= insert into stock (name) values ('C')    executed id=1

          q4= insert into stock (name) values ('D')    executed id=2

          q1= insert into stock (name) values ('A')    executed id=3

          q2= insert into stock (name) values ('B')    executed id=4

B的数据库:(1,'C'),(2,'D'),(3,'A'),(4,'B')

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10154953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档