我有一个laravel应用程序A与mysql数据库db 1和一个表p1和一个不同的php应用程序B与一个等效的表p2在其mysql数据库db2。我想找到最好的,安全和完整的方式来更新至少从应用程序B都p1在db 1和p2在db2。我有一些列只在p1,有些列只在p2和一些共同的列,但行有一个一对一的等价从来没有一对多。它是同一个实体,从真实的世界。
1.主体质询
我曾经想过在应用程序B中使用一个事务来编辑表单,在这个事务中,我用两个表各自的列和新值来更新这两个表,但是这会阻止来自两个数据库的记录吗?我需要担心什么?
1.额外场景
2.1.开始事务2.2.我在db 1的p1中更新了一个fk列,它工作了2.3.当我完成事务时,有人在应用程序a中删除了fk对应表f1.id =p1.fk中的行2.4.我在没有fk列的数据库db2中进行了更新; 2.5.我应该提交还是给予我一个错误(应该),即第一次更新不能执行?
1.澄清1
如果我也想在应用程序A中实现和编辑表单,那么同样的解决方案也适用吗?我应该只在一个应用程序中更新吗?
1.澄清2
我应该使用什么样的设置,如隔离级别,以及如何使用?一个代码示例将非常有帮助。
我愿意听取关于如何完成这项任务的建议。谢谢。
start transaction
UPDATE db1.p1 pp1 inner join db2.p2 pp2 on pp1.iddb2=pp2.id
SET
pp1.fk_id=23,
pp1.commoncol='a',
pp2.commoncol='a',
pp2.extracol='b'
WHERE pp2.id=123;
commit;
字符串
2条答案
按热度按时间eivnm1vs1#
我不认为这是一个问题 * 如果这两个数据库是在同一个MySQL示例 *,但.
SELECT
一些数据,使用SELECT ... FOR UPDATE
。(我不知道Laravel是如何公开这个选项的。)(我同意评论中的观点,即拥有两个数据库并同步它们可能是“过度思考”的任务。
flmtquvp2#
同时对两个独立数据库中的数据进行更改,同时确保数据保持一致可能是一项棘手的工作。
如果你使用Laravel的Eloquent,你可以使用DB::transaction方法将你的更新分组到一个transaction中。
这里有一个Laravel的例子:
字符串
在您的场景中,如果您先修改p1中的外键,然后有人在db2中更新p2之前删除了db1中相应的行,那么在维护它们之间的关联时可能会遇到困难,这称为引用完整性问题。