サーチ…
構文
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;
エイリアスq
とi
は、テーブル参照を省略するために使用されます。これにより、開発と読みやすさが容易になります。
qId
は、主キーで、Stackoverflowの質問IDを表します。 4つの列は、結合から一致する行のために更新されます。
ORDER BYとLIMITを使用したUPDATE
更新SQL文でORDER BY
句を指定すると、指定された順序で行が更新されます。
SQL文でLIMIT
句を指定すると、更新可能な行数に制限が設定されます。 LIMIT
句が指定されていない場合、制限はありません。
ORDER BY
とLIMIT
は、マルチテーブルの更新には使用できません。
ORDER BY
とLIMIT
を使用した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 BY
とLIMIT
は使用できません。
マルチテーブル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
句で検索されるすべてのパラメータが含まれている必要があります。