-1

あるテーブルの行を別のテーブルの内容で 2 行更新したいと考えています。テーブルを 2 つのエイリアス () でロックするよりも効率的な方法はありますかnew_data AS x & y

SET AUTOCOMMIT=0;

START TRANSACTION;

LOCK TABLES
1_products_speech WRITE,
new_data as x WRITE,
new_data as y WRITE;

UPDATE 1_products_speech 
SET 
    v1 = (SELECT 
            data_blob
        FROM
            new_data as x
        WHERE
            id = 1),
    v2 = (SELECT 
            data_blob
        FROM
            new_data as y
        WHERE
            id = 2)
WHERE
    fk_products_id = 1890;

COMMIT;

UNLOCK TABLES;
4

1 に答える 1

1

Mysql は複数テーブルの更新ステートメントをサポートしているため、クエリを次のように書き直すことができます。

UPDATE 1_products_speech 
JOIN new_data x ON id = 1
JOIN new_data y ON id = 2
SET
  v1 = x.data_blob,
  v2 = y.data_blob
WHERE fk_products_id = 1890;

他のテーブルへの結合はメイン テーブルの値に依存しないため、コーディングに関してはより効率的であると考えられるかもしれませんが、パフォーマンスに関してはより効率的であるとは思えません。

于 2013-05-16T11:03:08.297 に答える