KunlunDB功能之insert/update/delete...returning語句
在一些業務場景中,使用者需要插入、更新、刪除一行或者多行目標資料行,然後獲得自己剛剛插入、更新、刪除之後的行或者其部分欄位的值,包括部分欄位構成的任意合法的表示式的值。
對於MySQL使用者來說,要做到這一點,使用者通常需要在一個顯式的事務中執行update語句,然後使用相同的查詢條件把update的語句取出來。
之所以要在顯式事務中做,是為了防止其他併發的事務update了本連線剛剛update的行,那樣的話,隨後的select語句得到行就不是本連線剛剛update之後的行了,因為這些行又被其他事務更新過了。
而在Oracle和PostgreSQL資料庫中,使用者可以使用update/delete語句的returning子句,用一條語句完成上述工作。
這樣的好處是可以提升效率,省去的開銷包括髮送一條select語句以及做目標行的查詢等工作;省去的開銷還包括操作顯式事務的開銷,也就是傳送begin和commit語句的開銷。
因此,使用update…returning語句預期可以比在顯式事務中update行,然後select出來,能夠提升效能10%以上。
所以這是一個很好的功能。事實上如果你搜尋 “mysql update returning”,你還能搜到不少在MySQL中實現類似oracle/postgresql的單條update/delete語句的returning子句的文章,通過藉助觸發器和臨時表等技巧和複雜的操作。
但是這些複雜的步驟導致語句執行效率也顯著降低了,並且使用也不方便(需要對每個資料表建立觸發器)。
為了提升使用者的程式效率,降低使用者的開發難度,提升使用者使用KunlunDB的體驗,我們在KunlunDB中也實現insert/update/delete語句的returning子句。
為此,我們在kunlun-storage中實現了insert/update/delete… returning語句供計算節點使用,並且在計算節點中基於PostgreSQL原有的insert/update/delete…returning 語句的實現,加入了對遠端資料讀寫的支援。
這樣,KunlunDB就具備了insert…returning、update…returning和delete…returning語句功能,分別返回insert語句插入的行,update語句更新後的行,以及返回delete語句刪除的行,包括這些行的欄位組成的任意合法的表示式的值。使用者已經可以在KunlunDB上使用這些功能。
下圖展示了這個很cool的功能。
首先,建表並填充資料:
現在我們執行update… returning語句:
然後執行delete… returning子句:
最後,explain一下update/delete… returning子句:
-END-
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011764/viewspace-2893332/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- LINQ to SQL語句之Insert/Update/Delete操作SQLdelete
- SQLite語句(二):INSERT DELETE UPDATE SELECTSQLitedelete
- MySQL 5.5 INSERT ... ON DUPLICATE KEY UPDATE語句說明MySql
- 輕量ORM-SqlRepoEx (四)INSERT、UPDATE、DELETE 語句ORMSQLdelete
- SQLTest系列之INSERT語句測試SQL
- SQLite Insert 語句SQLite
- mysql update join,insert select 語法MySql
- 【SQL】10 SQL UPDATE 語句SQL
- Sql Server系列:Update語句SQLServer
- FORALL執行UPDATE語句
- SQL update select語句SQL
- 【SQL】9 SQL INSERT INTO 語句SQL
- Sql Server系列:Insert語句SQLServer
- Oracle中 Update和insert結合語法Oracle
- MySQL -update語句流程總結MySql
- ORACLE多表關聯UPDATE語句Oracle
- MySQL的update語句避坑MySql
- ORACLE多表關聯UPDATE 語句Oracle
- MySql與Sql Server Update語句MySqlServer
- update語句的優化方式優化
- FORALL執行UPDATE語句(二)
- ORACLE UPDATE 語句語法與效能分析Oracle
- 教你使用SQLite-insert語句SQLite
- SQLite中特殊的INSERT語句SQLite
- Merge into: Oracle中用一條SQL語句直接進行Insert/Update的操作(R1)OracleSQL
- ASP.NET動態網站開發培訓-20.INSERT、UPDATE和DELETE語句ASP.NET網站delete
- mysql實現merge功能之DUPLICATE key UPDATE語法MySql
- 【SQL】14 UNION 操作符、SELECT INTO 語句、INSERT INTO SELECT 語句、CREATE DATABASE 語句、CREATE TABLE 語句SQLDatabase
- MySQL INSERT IGNORE語句的使用MySql
- MySQL之資料的insert-delete-update操作MySqldelete
- flask之控制語句 if 語句與for語句Flask
- 一條update語句的優化探索優化
- oracle update語句的幾點寫法Oracle
- mysql INSERT ... ON DUPLICATE KEY UPDATEMySql
- oracle-資料庫- insert 插入語句Oracle資料庫
- 快速執行大量 insert 語句的方法
- 用merge 語句代替 insert 和deletedelete
- Sqlserver、oracle中Merge的使用方法,一個merge語句搞定多個Insert,Update,Delete操作SQLServerOracledelete