Php 如何将事务与两个数据库一起使用?
有两个数据库:DB1、DB2。 这些数据库表上有:DB1.groups[id,name]和DB2.keywords[id,name,group\u id]。 DB1.groups.id-它是DB2.keywords.group\u id的外键 任务是:获取数据->处理数据->更新DB1.groups->更新DB2.keywords。 伪代码实现:Php 如何将事务与两个数据库一起使用?,php,mysql,database,transactions,yii2,Php,Mysql,Database,Transactions,Yii2,有两个数据库:DB1、DB2。 这些数据库表上有:DB1.groups[id,name]和DB2.keywords[id,name,group\u id]。 DB1.groups.id-它是DB2.keywords.group\u id的外键 任务是:获取数据->处理数据->更新DB1.groups->更新DB2.keywords。 伪代码实现: //begin transaction for DB1; begin_transaction('db1'); try { $a = get_d
//begin transaction for DB1;
begin_transaction('db1');
try {
$a = get_data()
$a = handle1($a);
insert_to_db1($a);
insert_to_db2($a); // here the query gets stuck and throws an error “Lock wait timeout exceeded; try restarting transaction”
commit_transaction('db1');
} catche(\Exception $e) {
rollback_transaction('db1');
}
原因是我阻塞了DB1中的行并更新了第二个数据库DB2中的表,它冻结了,因为我在锁定记录DB1的外键中有它(请求它在DB1中等待解锁行)。如果我将删除外键-一切都很快完成
如何解决这个问题?我知道事务对于单个数据库来说是原子的,但是对于同一个数据库来说是原子的,我有一个小问题。我需要同时使用两个数据库的事务。
我不想删除外键来解决这个问题。
我害怕在没有事务的情况下使用它(当只更新一个DB时,我会遇到大问题)
如何解决问题?您需要使用一个数据库连接。@Vatev如何使用一个数据库连接来切换两个数据库?请运行
use
切换数据库,或者在查询中使用
。我认为唯一的方法是在开始任何事务之前知道组id。否则,在提交db1 trans之前,db2 trans不会看到db1中的更改