1

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

最初の方法のように、単一のトランザクション内で複数のデータベースを切り替える際に問題はありますか。トランザクション データベース レベルですか、それともグローバル レベルですか?

4

1 に答える 1

2

これはうまくいくはずです。明らかDB_1DB_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;
于 2013-11-01T12:54:32.167 に答える