Oracle 資料庫實現數據更新:update、merge

来源:http://www.cnblogs.com/com-xiaolanchong/archive/2017/10/21/7684130.html
-Advertisement-
Play Games

工作中遇到的數據更新,學習記錄。 1、使用update進行數據更新 1)最簡單的更新 update tablea a set a.price=1.00 2)帶條件的數據更新 update tablea a set a.price = 2.00 where a.id='02' 3)兩張表關聯更新為固定 ...


工作中遇到的數據更新,學習記錄。

1、使用update進行數據更新

  1)最簡單的更新

  update tablea a set a.price=1.00

  2)帶條件的數據更新

  update tablea a set a.price = 2.00  where  a.id='02'

  3)兩張表關聯更新為固定值

  update tablea a set a.price =3.00 where exits(select 1 from tableb b where a.id=b.id)

  將a,b相同id的 a表的price 欄位更新為 3.00

  4)關聯更新數據來源第二張表

  update tablea a set a.price=(select price from tablec c ) where exits (select 1 from tablec c where a.id=c.id)

  將a表price欄位 更新為 id和c表id相同的數據

  5)關聯更新多個欄位

  update tablea a set ( a.price,a.type)=(select c.price,c.type from tablec c ) where exits (select 1 from tablec c where a.id=c.id)

  更新a表的price 和 type 欄位  

  6)使用視圖方式更新

  update (select a.price old,c.price as new from tablea a ,tablec c where a.id=c.id) set old=new 

 以上為自己瞭解到的Update使用方式,需要註意 a.id 和c.id需要一一對應。即c表只有一條id 與a表id對應,否則會報錯

ORA-01427:"single-row subquery returns more than one row"

單行查詢返回多行結果。是不能進行更新的。

2、merge 更新使用

  工作中要對一個欄位:次數 進行更新 表數據量在 13w+ 需要兩表關聯 也就是 兩個 13w+ 的表進行關聯。

  在使用update進行更新的時候,效率問題大大降低。加上限制條件更新 100條數據還用了6-8S,所以 update並不適用。

  查閱資料看到merge 更新,便學習記錄。

  MERGE 在SQL ServerOracle資料庫中可用,MySQL、PostgreSQL中不可用。可以同時進行更新和插入操作。執行效率要高於INSERT+UPDATE。

  語法:

  MERGE INTO [your table-name] [rename your table here]
  USING ( [  your query ] )[rename your query-sql and using just like a table]
  ON ([conditional expression  ] AND [...]...)
  WHEN MATHED THEN [here you can execute some update sql or something else ]
  WHEN NOT MATHED THEN [execute something else here ! ]

  示例

  merge into tablea a        ----要更新或者操作的表

  using tablec c     ----源表 using (select * from tablec ) c

  on a.id=c.id      --匹配條件

  when matched then set a.price=c.price  --當匹配時進行更新操作

  when not matched then     --不匹配進行插入操作

  insert values values(c.id,c.price)

 

  using 後不僅可以使用 表 也可以是 視圖或者子查詢 using (select * from tablec ) c

  not matched 可以沒有 就是當不匹配什麼也不做。

  

  總結:

  之前說的使用update更新100行數據都需要6-8S 使用merge 更新全部數據(13W+ 與13W+ 關聯)只用了10S左右。更新效率可見要比update高很多。

  僅供學習使用。

 

  

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在按照第三方sdk文檔中的Emedded Binaries 中加入了他們的framework,在刪除這下麵的對應的framework後,問題就得到瞭解決 發下有個英文的頁面也是涉及這個問題的, 描述的很詳細. 鏈接: https://stackoverflow.com/questions/41786 ...
  • 一:sqlserver 執行計劃介紹 sqlserver 執行計是在sqlser manager studio 工具中打開,是檢查一條sql執行效率的工具。建議配合SET STATISTICS IO ON等語句來一起使用,執行計劃是從右向左看,耗時高的一般顯示在右邊,我們知道,sqlserver 查 ...
  • 例:MySQL5.7.19 下載 當然首先是要下載咯https://dev.mysql.com/downloads/mysql/ 官網下載地址。 選擇適合自己電腦的版本,點擊Download,跳轉,直接No thanks下載好了。 靜靜的等待下載,解壓。這是我的解壓路徑D:\MySQL 正式開始安裝 ...
  • Redis4.0 Cluster — Centos7, Ruby redis-trib.rb , gem redis ...
  • 一、安裝包 先從網路上,下載Mysql安裝包,複製到U盤 下載地址:https://dev.mysql.com/downloads/mysql/ 二、掛載U盤 2.1查看分區 先輸入命令 cat /proc/partitions 插入U盤,重新輸入命令 cat /proc/partitions 結果 ...
  • 熟悉Oracle上機環境及Oracle客戶端的配置;熟練掌握和使用DDL語言,建立、修改和刪除資料庫表、主鍵、外鍵約束關係和索引。 (修改資料庫表名) 將資料庫表S1改名為Student_Temp。 在定義外鍵約束條件時,不能把其他表中沒有的屬性定義在本表的外鍵中,否則會生辰一個錯誤; 在建表時,因 ...
  • 一、流程式控制制語句 1) 迴圈語句 == loop .. end loop 簡單的迴圈,至少被執行一次 == while ... loop end loop == for 2) 控制語句 == goto 用於跳轉到指定的標號去執行,不建議使用 語法: goto 標號名 == null 語句 null語 ...
  • 一、概述 pl/sql (procedural lanaguage/sql)是 oracle 在標準 sql 上的擴展 。不僅允許嵌入sql 語言,還可以定義變數和常量,允許使用條件語句和迴圈語句,允許使用例外處理錯誤。 -- 可以用來編寫過程,函數,和觸發器 -- 上述對象是放在資料庫中的 //數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...