SQLコマンドの使用によるデータの更新

UPDATE文を使用して、表の行を更新できます。

  • SET句は、ターゲット式と新しい値式の2つの式で構成されます。ターゲット式は、更新する項目を返します。新しい値式は、ゼロ以上の項目を返すことができます。空の結果が返された場合、SETは何も処理を行いません。複数の項目が返された場合、項目は新しく作成された配列の中に格納されます(これは、SELECT句が選択リスト内の複数値式を処理する方法と同じです)。そのため、実質的には、新しい値式の結果には、最大で1つの項目が含まれます。
  • WHERE句では、どの行を更新するかを指定します。現在の実装では、単一行の更新のみが許可されるため、WHERE句で完全な主キーを指定する必要があります。
  • オプションのRETURNING句は、SELECT句と同じように機能します。つまり、"*"を指定でき、その場合は更新された完全な行が返されます。または、返される必要があるものを指定する式のリストを指定できます。
  • さらに、WHERE条件を満たす行がない場合、UPDATE文は空の結果を返します。

例: 列値を変更する単純な例。

指定したチケット番号の一部の列値を更新します。
UPDATE BaggageInfo 
SET contactPhone = "823-384-1964", 
confNo = "LE6J4Y" 
WHERE ticketNo = 1762344493810

例: 行データを更新し、RETURNING句を使用して値をフェッチします。

UPDATE句の実行後に、RETURNING句を使用してデータをフェッチできます。
UPDATE BaggageInfo 
SET contactPhone = "823-384-1964", 
confNo = "LE6J4Y"
WHERE ticketNo = 1762344493810 RETURNING *
出力:
{"ticketNo":1762344493810,"fullName":"Adam Phillips","gender":"M","contactPhone":"823-384-1964",
"confNo":"LE6J4Y",
"bagInfo":{"bagInfo":[{"bagArrivalDate":"2019.02.02 at 03:13:00 AEDT","flightLegs":
[{"actions":[{"actionAt":"MIA","actionCode":"ONLOAD to LAX","actionTime":"2019.02.01 at 01:13:00 EST"},
{"actionAt":"MIA","actionCode":"BagTag Scan at MIA","actionTime":"2019.02.01 at 00:47:00 EST"},
{"actionAt":"MIA","actionCode":"Checkin at MIA","actionTime":"2019.01.31 at 23:38:00 EST"}],
"estimatedArrival":"2019.02.01 at 03:00:00 PST","flightDate":"2019.02.01 at 01:00:00 EST",
"flightNo":"BM604","fltRouteDest":"LAX","fltRouteSrc":"MIA"},{"actions":
[{"actionAt":"MEL","actionCode":"Offload to Carousel at MEL","actionTime":"2019.02.02 at 03:15:00 AEDT"},
{"actionAt":"LAX","actionCode":"ONLOAD to MEL","actionTime":"2019.02.01 at 07:35:00 PST"},
{"actionAt":"LAX","actionCode":"OFFLOAD from LAX","actionTime":"2019.02.01 at 07:18:00 PST"}],
"estimatedArrival":"2019.02.02 at 03:15:00 AEDT","flightDate":"2019.01.31 at 22:13:00 PST",
"flightNo":"BM667","fltRouteDest":"MEL","fltRouteSrc":"LAX"}],"id":"79039899165297",
"lastActionCode":"OFFLOAD","lastActionDesc":"OFFLOAD","lastSeenStation":"MEL",
"lastSeenTimeGmt":"2019.02.02 at 03:13:00 AEDT","routing":"MIA/LAX/MEL","tagNum":"17657806255240"}]}}
例: stream_acct表内の顧客のアカウント有効期限を更新します。
UPDATE stream_acct SET account_expiry="2023-12-28T00:00:00.0Z" WHERE acct_Id=3
1 row updated

例: storeAcct表内の誤った買物客のデータ・レコードを変更します。

UPDATE文を使用して、JSONコレクション表の既存のドキュメントのフィールドを更新できます。UPDATE操作は、固定スキーマ表と同様に機能します。ショッピング・アプリケーション表用に作成されたJSONコレクション表の行について考えてみます。

{"contactPhone":"1617114988","address":{"Dropbox":"Presidency College","city":"Kansas City","state":"Alabama","zip":95065},"cart":[{"item":"A4 sheets","priceperunit":500,"quantity":2},{"item":"Mobile Holder","priceperunit":700,"quantity":1}],"email":"lorphil@usmail.com","firstName":"Lorenzo","lastName":"Phil","notify":"yes","orders":[{"EstDelivery":"2023-11-15","item":"AG Novels 1","orderID":"101200,"priceperunit":950,"status":"Preparing to dispatch"},{"EstDelivery":"2023-11-01","item":"Wall paper","orderID":"101200,"priceperunit":950,"status":"Transit"}]}
update句を使用して、買物客のデータを次のように修正します。
UPDATE storeAcct s
SET s.notify = "no",
REMOVE s.cart [$element.item = "A4 sheets"],
PUT s.address {"Block" : "C"},
SET s.orders[0].EstDelivery =  "2023-11-17",
ADD s.cart 1 {"item":"A3 sheets", "priceperunit":600, "quantity":2}
WHERE s.contactPhone = "1617114988"

前述の例では、storeAcct表の買物客のレコードを更新して、いくつかの不注意なエラーを修正します。この修正には、storeAcct表の様々なフィールドの更新が必要です。SET句は、買物客のデータ・レコードの通知設定を非アクティブ化します。REMOVE句は、カート内のいずれかのitemフィールドがA4 sheetsと一致するかどうかをチェックし、対応する要素をorders配列から削除します。PUT句は、配信のランドマークを示す新しいJSONフィールドを追加します。2番目のSET句は、深くネストされたEstDeliveryフィールドにアクセスし、orders配列の最初の商品の推定配信日を更新します。ADD句は、cartフィールドに新しい要素を挿入して、追加商品の候補リストを作成します。

更新された買物客のデータをフェッチすると、次の出力が表示されます。
{"contactPhone":"1617114988","address":{"Block":"C","Dropbox":"Presidency College","city":"Kansas City","state":"Alabama","zip":95065},"cart":[{"item":"Mobile Holder","priceperunit":700,"quantity":1},{"item":"A3 sheets","priceperunit":600,"quantity":2}],"email":"lorphil@usmail.com","firstName":"Lorenzo","lastName":"Phil","notify":"no","orders":[{"EstDelivery":"2023-11-17","item":"AG Novels 1","orderID":"101200,"priceperunit":950,"status":"Preparing to dispatch"},{"EstDelivery":"2023-11-01","item":"Wall paper","orderID":"101200,"priceperunit":950,"status":"Transit"}]}