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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQLite語句(二):INSERT DELETE UPDATE SELECTSQLitedelete
- DBeaver如何生成select,update,delete,insert語句delete
- 輕量ORM-SqlRepoEx (四)INSERT、UPDATE、DELETE 語句ORMSQLdelete
- SQLite Insert 語句SQLite
- mysql update join,insert select 語法MySql
- Exadata混合列壓縮功能與INSERT語句BF
- insert into select語句與select into from語句
- insert all和insert first語句的用法
- 【SQL】9 SQL INSERT INTO 語句SQL
- Oracle中 Update和insert結合語法Oracle
- [20181120]奇怪的insert語句.txt
- 教你使用SQLite-insert語句SQLite
- 【SQL】10 SQL UPDATE 語句SQL
- 【SQL】14 UNION 操作符、SELECT INTO 語句、INSERT INTO SELECT 語句、CREATE DATABASE 語句、CREATE TABLE 語句SQLDatabase
- MySQL -update語句流程總結MySql
- ORACLE多表關聯UPDATE語句Oracle
- MySQL的update語句避坑MySql
- Sqlserver、oracle中Merge的使用方法,一個merge語句搞定多個Insert,Update,Delete操作SQLServerOracledelete
- mysql實現merge功能之DUPLICATE key UPDATE語法MySql
- oracle-資料庫- insert 插入語句Oracle資料庫
- MySQL全文索引原始碼剖析之Insert語句執行過程MySql索引原始碼
- PostgreSQL的insert語句執行過程分析SQL
- flask之控制語句 if 語句與for語句Flask
- 一個UPDATE語句引發的血案
- MySQL:一個簡單insert語句的大概流程MySql
- MySQL insert on duplicate key update 死鎖MySql
- mybatis 批量新增insert、更新update詳解MyBatis
- 比CRUD多一點兒(三):UPDATE、DELETE語句delete
- 一條update SQL語句是如何執行的SQL
- Mysql跨表更新 多表update sql語句總結MySql
- TiDB 原始碼閱讀系列文章(十六)INSERT 語句詳解TiDB原始碼
- PostgreSQL 原始碼解讀(14)- Insert語句(如何構造PlannedStmt)SQL原始碼
- INSERT...SELECT語句對查詢的表加鎖嗎
- 比CRUD多一點兒(二):基礎INSERT、SELECT語句
- 翻譯:update語句(已提交到MariaDB官方手冊)
- Oracle vs PostgreSQL,研發注意事項(13) - UPDATE語句OracleSQL
- sql server 帶有OUTPUT的INSERT,DELETE,UPDATESQLServerdelete
- BUG: pymysql executemany不支援insert on duplicate key updateMySql