SQL Server 2008 引入了一个Merge关键字,MSDN有对这个关键字的解释和范例。传送门:http://msdn.microsoft.com/zh-cn/library/bb510625.aspx 微软官方解释是: 根据与源表联接的结果,对目标表执行插入、更新或删除操作。 例如,根据在另一个表中找到的差异
SQL Server 2008 引入了一个Merge关键字,MSDN有对这个关键字的解释和范例。传送门:http://msdn.microsoft.com/zh-cn/library/bb510625.aspx 微软官方解释是:根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。如果这个官方解释用白话文说就是:插入,更新和删除一步到位!
场景1:数据监测
这里有一个场景是,有一个旧总的商品表(AllProduct),还有一个新采集的商品表(Product)。总的商品表里面的数据比较陈旧,一些新的数据还没有加到里面去,而且有些旧的数据不正确。我们现在要根据商品Code来比对,如果旧表与新表的Code相同,但是名字不同,以新表的名字为准,更新旧表里面的商品名称。如果新的商品的记录在旧表里面不存在,那么把新表里面的数据插入到旧表里面去。新表和旧表的表结构完全相同。说了这么多,可能有点绕,那么总结下就是:
1)两张表(新表和旧表)的结构相同数据不同;
2)新表里面的数据如果不存在(根据主键进行匹配)于旧表,则把新表的数据插入旧表
3)旧表中的记录的ID如果和新表的记录的ID相同,但是Name不同,则将更新旧表中的Name为新表中的Name
初始化环境的Sql代码如下:
if OBJECT_ID('AllProducts') is not null drop table AllProducts go Create table AllProducts ( P_ID int not null identity(1,1) primary key, P_Name Nvarchar(20) null, P_Code NVarchar(30) null, P_Date datetime null ) go Insert into AllProducts (P_Name,P_Code,P_Date) values ('ProductA','Pro_A',GETDATE()), ('ProductB','Pro_B',GETDATE()), ('ProductB','Pro_C',GETDATE()), ('ProductD','Pro_D',GETDATE()), ('ProductE','Pro_E',GETDATE()) if OBJECT_ID('Product') is not null drop table Product go Create table Product ( P_ID int not null identity(1,1) primary key, P_Name Nvarchar(20) null, P_Code NVarchar(30) null, P_Date datetime null ) go Insert into Product (P_Name,P_Code,P_Date) values ('ProductA','Pro_A',GETDATE()), ('ProductC','Pro_C',GETDATE()), ('ProductF','Pro_F',GETDATE()) select * from AllProducts; select * from Product;
输出结果如下:
根据我们确定的规则,即将发生如下更新和插入:
1)更新:AllProduct表中的name为Pro_A和name为Pro_C的记录会被匹配到,然后由于Pro_C对应的Name不同,所以AllProecudt表中的Name会被更新。
2)插入:AllProduct表中没有Pro_F这条记录,所以会被插入到AllProduct表中
我们使用Merge的sql如下:
--确定目标表 Merge Into AllProducts p --从数据源查找编码相同的产品 using Product s on p.P_Code=s.P_Code --如果编码相同,则更新目标表的名称 When Matched and P.P_Names.P_Name Then Update set P.P_Name=s.P_Name --如果目标表中不存在,则从数据源插入目标表 --When Not Matched By Target Then Insert (DName,DCode,DDate) values (s.DName,s.DCode,s.DDate); When Not Matched By Target Then Insert values (s.P_Name,s.P_Code,s.P_Date);
上面注释的那条语句和下面的那个意义相同,只是没有那么简洁。执行结果如下:
第一条记录已经被更新,第二条记录是从Product表中插入的,是不是真的很简洁。
场景2:数据表同步
如果希望AllProdct和Product表一模一样,即数据同步,那么我们需要删掉Product表中不存在于AllProduct表中的记录。整个sql如下:
--确定目标表 Merge Into AllProducts p --从数据源查找编码相同的产品 using Product s on p.P_Code=s.P_Code --如果编码相同,则更新目标表的名称 When Matched and P.P_Names.P_Name Then Update set P.P_Name=s.P_Name --如果目标表中不存在,则从数据源插入目标表 --When Not Matched By Target Then Insert (DName,DCode,DDate) values (s.DName,s.DCode,s.DDate); When Not Matched By Target Then Insert values (s.P_Name,s.P_Code,s.P_Date) --如果数据源的行在目标表中不存在,则删除源表行 When Not Matched By Source Then Delete;
总结:Merge是同时做插入和更新,效率据说更高。

要優化MySQL慢查詢,需使用slowquerylog和performance_schema:1.啟用slowquerylog並設置閾值,記錄慢查詢;2.利用performance_schema分析查詢執行細節,找出性能瓶頸並優化。

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

MySQL異步主從復制通過binlog實現數據同步,提升讀性能和高可用性。 1)主服務器記錄變更到binlog;2)從服務器通過I/O線程讀取binlog;3)從服務器的SQL線程應用binlog同步數據。

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL的安裝和基本操作包括:1.下載並安裝MySQL,設置根用戶密碼;2.使用SQL命令創建數據庫和表,如CREATEDATABASE和CREATETABLE;3.執行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.創建索引和存儲過程以優化性能和實現複雜邏輯。通過這些步驟,你可以從零開始構建和管理MySQL數據庫。

InnoDBBufferPool通過將數據和索引頁加載到內存中來提升MySQL數據庫的性能。 1)數據頁加載到BufferPool中,減少磁盤I/O。 2)臟頁被標記並定期刷新到磁盤。 3)LRU算法管理數據頁淘汰。 4)預讀機制提前加載可能需要的數據頁。

MySQL適合初學者使用,因為它安裝簡單、功能強大且易於管理數據。 1.安裝和配置簡單,適用於多種操作系統。 2.支持基本操作如創建數據庫和表、插入、查詢、更新和刪除數據。 3.提供高級功能如JOIN操作和子查詢。 4.可以通過索引、查詢優化和分錶分區來提升性能。 5.支持備份、恢復和安全措施,確保數據的安全和一致性。

全表掃描在MySQL中可能比使用索引更快,具體情況包括:1)數據量較小時;2)查詢返回大量數據時;3)索引列不具備高選擇性時;4)複雜查詢時。通過分析查詢計劃、優化索引、避免過度索引和定期維護表,可以在實際應用中做出最優選擇。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中