サーチ…


構文

  • UPDATE [LOW_PRIORITY] [IGNORE]テーブル名SET column1 = expression1、column2 = expression2、... [WHERE条件]; //単純な単一のテーブルの更新

  • UPDATE [LOW_PRIORITY] [IGNORE]テーブル名SET column1 = expression1、column2 = expression2、... [WHERE条件] [ORDER BY式[ASC | DESC]] [LIMIT行_カウント]; // order byとlimitで更新する

  • UPDATE [LOW_PRIORITY] [IGNORE]テーブル1、テーブル2、... SET column1 = expression1、column2 = expression2、... [WHERE条件]; //複数のテーブルの更新

基本的な更新

1行の更新

UPDATE customers SET email='[email protected]' WHERE id=1

このクエリは、コンテンツ更新emailでのcustomers列にテーブル[email protected]の値id 1.データベーステーブルの古いものと新しい内容がそれぞれ左右に、以下に例示されているに等しいです。

ここに画像の説明を入力


すべての行の更新

UPDATE customers SET lastname='smith'

このクエリは、 customersテーブル内のすべてのエントリのlastnameの内容を更新します。データベーステーブルの古い内容と新しい内容は、それぞれ以下の左と右に示されています。

ここに画像の説明を入力

注意: UPDATEクエリには条件句(WHERE)を使用する必要があります。条件節を使用しない場合、その表の属性のすべてのレコードが更新されます。上記の例では、customersテーブルのlastnameの新しい値(Smith)がすべての行に設定されています。

結合パターンによる更新

LOAD DATA INFILEからインポートされたCSVデータの最後のバッチを表す、 questions_mysqlという本番表とiwtQuestions表(インポートされた作業表)を考えてみましょう。インポート前にワークテーブルが切り捨てられ、データがインポートされ、そのプロセスはここには表示されません。

インポートされたワークテーブルデータへの結合を使用して、本番データを更新します。

UPDATE questions_mysql q -- our real table for production 
join iwtQuestions i -- imported worktable 
ON i.qId = q.qId
SET q.closeVotes = i.closeVotes,
q.votes = i.votes, 
q.answers = i.answers, 
q.views = i.views;

エイリアスqiは、テーブル参照を省略するために使用されます。これにより、開発と読みやすさが容易になります。

qIdは、主キーで、Stackoverflowの質問IDを表します。 4つの列は、結合から一致する行のために更新されます。

ORDER BYとLIMITを使用したUPDATE

更新SQL文でORDER BY句を指定すると、指定された順序で行が更新されます。

SQL文でLIMIT句を指定すると、更新可能な行数に制限が設定されます。 LIMIT句が指定されていない場合、制限はありません。

ORDER BYLIMITは、マルチテーブルの更新には使用できません。

ORDER BYLIMITを使用したMySQL UPDATE構文は、

UPDATE [ LOW_PRIORITY ] [ IGNORE ]
tableName
SET column1 = expression1,
    column2 = expression2,
    ...
[WHERE conditions]
[ORDER BY expression [ ASC | DESC ]]
[LIMIT row_count];

---> Example
UPDATE employees SET isConfirmed=1 ORDER BY joiningDate LIMIT 10

上記の例では、 joiningDateする従業員の順序に従って10行が更新されます。

複数の表の更新

複数の表のUPDATEでは、条件を満たす指定された各表の行を更新します。一致する各行は、条件が複数回一致する場合でも、一度更新されます。

複数のテーブルUPDATEでは、 ORDER BYLIMITは使用できません。

マルチテーブルUPDATE構文は、

UPDATE [LOW_PRIORITY] [IGNORE] 
table1, table2, ...
    SET column1 = expression1,
        column2 = expression2,
        ...
    [WHERE conditions]

たとえば、2つのテーブル、 products 、およびsalesOrders考えてみsalesOrders 。その場合は、特定の商品の数量を、すでに発注されている受注から減額します。その後、我々はまた、当社の株式欄にその量を増やす必要があるproductsテーブル。これは、以下のような単一のSQL更新文で行うことができます。

UPDATE products, salesOrders
  SET salesOrders.Quantity = salesOrders.Quantity - 5, 
      products.availableStock = products.availableStock + 5
WHERE products.productId = salesOrders.productId
  AND salesOrders.orderId = 100 AND salesOrders.productId = 20;

上記の例では、数量 '5'はsalesOrdersテーブルからsalesOrdersされ、 WHERE条件に従ってproductsテーブルで同じ数量が増加しproducts

一括更新

異なる値で複数の行を更新する場合は、一括更新を使用する方がはるかに迅速です。

UPDATE people 
SET name = 
  (CASE id WHEN 1 THEN 'Karl'
           WHEN 2 THEN 'Tom'
           WHEN 3 THEN 'Mary'
   END)
WHERE id IN (1,2,3);

一括更新では、更新する行ごとに1つのクエリではなく、1つのクエリのみをサーバーに送信できます。ケースにはWHERE句で検索されるすべてのパラメータが含まれている必要があります。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow