我对MySQL InnoDB引擎事务有一些快速的问题。我有一些这种格式的数据库(db_1,db_2,db_3等...)
我想插入/更新到事务中的任何数据库,如下所示,
BEGIN
USE DB_1;
//Insert / Update into DB_1 tables
USE DB_2;
//Insert / Update into DB_2 tables
COMMIT
可以吗?或者我是否需要为每个数据库单独设置事务,如下所示,
BEGIN
USE DB_1;
//Insert / Update into DB_1 tables
COMMIT
BEGIN
USE DB_2;
//Insert / Update into DB_2 tables
COMMIT
在第一个方法中,在单个事务中切换多个数据库是否有任何问题。是事务数据库级别还是全局级别?
答案 0 :(得分:2)
这应该有效。显然DB_1
和DB_2
位于同一台服务器上。如果他们将要在不同的服务器上,那么集群就在您的未来! : - )
您可以考虑限定表的名称,而不是使用USE
语句。这可能会简化你的逻辑。
例如,
BEGIN;
INSERT INTO DB_1.mytable (myid, mycol) VALUES (1,'a');
INSERT INTO DB_2.histable (hisid, hiscol) VALUES (1,'b');
SELECT whatever
FROM DB_1.mytable AS m
JOIN DB_2.histable AS h ON m.myid = h.hisid;
COMMIT;