第一篇:分享高性能批量插入和批量刪除sql語句寫法
分享高性能批量插入和批量刪除sql語句寫法
一,技術(shù)水平總能在扯皮和吹毛求疵中得到提高。如果從來不“求疵”,可能就不會(huì)知道if(str!= “")不如if(str!= string.Empty)高效、批量插入和刪除的sql語句是要那樣寫才執(zhí)行最快、接口和抽象類的區(qū)別不僅是語言層面、原來權(quán)限管理是要這樣設(shè)計(jì)的、某個(gè)類那樣設(shè)計(jì)職責(zé)才更單一更易于擴(kuò)展……
本來前兩篇文章是學(xué)習(xí)cnblogs編輯控件用的,看到跟貼的朋友詢問批量插入和批量刪除的問題,決定整理成文和大家分享。
我們這里討論的只是普通sql語句如何寫更高效,不考慮特殊的用文件中轉(zhuǎn)等導(dǎo)入方式,畢竟在代碼中調(diào)用sql語句或存儲(chǔ)過程才更方便。
批量刪除很簡(jiǎn)單,大家可能都用過:
DELETE FROM TestTable WHERE ID IN(1, 3, 54, 68)--sql2005下運(yùn)行通過當(dāng)用戶在界面上不連續(xù)的選擇多項(xiàng)進(jìn)行刪除時(shí),該語句比循環(huán)調(diào)用多次刪除或多條delete語句中間加分號(hào)一次調(diào)用等方法都高效的多。
本文重點(diǎn)講述的是批量插入的寫法:
sql寫法:
INSERT INTO TestTable SELECT 1, 'abc' UNION SELECT2, 'bcd'UNION SELECT 3, 'cde'--TestTable表沒有主鍵,ID不是主鍵
oracle寫法:
INSERT INTO TestTable SELECT 1, 'abc' From daul UNION SELECT2, 'bcd' From daul--TestTable表沒有主鍵,ID不是主鍵
曾經(jīng)測(cè)試過,這種寫法插入1000條數(shù)據(jù)比循環(huán)調(diào)用1000次insert或1000條insert語句簡(jiǎn)單疊加一次調(diào)用要高效得多,大概快20多倍(調(diào)試狀態(tài)不是太準(zhǔn))。其實(shí)很簡(jiǎn)單,就用了個(gè)union(union all 也可以),但當(dāng)時(shí)得出測(cè)試結(jié)果時(shí)還是很驚喜的。
要得出這個(gè)結(jié)果需要兩個(gè)條件:
1、表不能有主鍵或者主鍵是數(shù)據(jù)庫默認(rèn)的(sql用自動(dòng)遞增列,oracle用序列)
2、組合sql語句時(shí)只能直接用字符串連接,不能用參數(shù)化sql語句的寫法(就是在組合的sql中用@parm做占位符,再給Command對(duì)象添加Parameter)
以上兩條任意一條不滿足,效率的提高都不明顯。
另外,sql語句的最大長(zhǎng)度有限制,組合幾千條數(shù)據(jù)寫成一條insert語句,可能會(huì)超過上限,所以如果有5000條數(shù)據(jù),可以一次insert 1000條,分5次寫完(不一定一次1000條最合適,有興趣的朋友可以研究)。
聲明:看了幾位朋友的評(píng)論后發(fā)現(xiàn)自己沒有敘述清楚
上面的兩個(gè)條件并不是說這樣做就好,而是說當(dāng)應(yīng)用場(chǎng)景滿足這兩個(gè)條件時(shí)才適合用union的寫法
當(dāng)時(shí)用這種寫法時(shí),是為了解決一個(gè)WinForm程序批量導(dǎo)入手機(jī)號(hào)碼的問題,程序給自己人用,excel文件也是可靠的,不需要考慮sql攻擊。還有一些場(chǎng)景是大量數(shù)據(jù)來源于通過Gprs網(wǎng)絡(luò)連接的專用終端,總之?dāng)?shù)據(jù)來源是可靠的,還有就是數(shù)據(jù)量很大但不可能巨大。
PS:常常遇到一些小技巧或者值得注意的小細(xì)節(jié),沒有記下來,要等下次再遇到時(shí)才想起來?,F(xiàn)在下決心要養(yǎng)成好的工作習(xí)慣,留此文為證。
能夠整理成文的要寫在項(xiàng)目組開發(fā)規(guī)范中,其它的至少要記錄下來。
二,使用mybatis將數(shù)據(jù)批量插入到oracle中,在映射文件中怎么寫?。?/p>
1.mybaits版本,3.1.0
2.1.2.3.4.5.6.7.
.office},#{item.remark})
8.9.
這個(gè)是參考網(wǎng)上的寫法寫的不過不支持向oracle中批量插入!
不知道有誰遇到過嗎?或者給出解決方法,該怎么解決?
?
找到 一種 寫法 分享 :
insert into
xxxxtable(hkgs,hkgsjsda,office,asdf,ddd,ffff,supfullName,classtype,agent_type,remark)
?
可以考慮用union all來實(shí)現(xiàn)批量插入。
例如:
insert into XX_TABLE(XX,XX,XX)select 'xx','xx','xx' union all select 'xx','xx','xx' union all select 'xx','xx','xx'...先拼裝好語句再動(dòng)態(tài)傳入insert into XX_TABLE(XX,XX,XX)后面部分,不知道能不能幫你解決問題
第二篇:SQL插入語句補(bǔ)充
--傳統(tǒng)的插入語句insert into 表名(字段列表)values(值列表)--每次插入一行
--復(fù)制表的內(nèi)容:從一張已經(jīng)存在的表里面查詢出一些數(shù)據(jù)插入到另外一張已經(jīng)存在的表
insertinto tt(username,password)
select username,password from tt
--創(chuàng)建新表:tt3之前不能存在,由這句代碼創(chuàng)建
select username,password into tt3 from tt
select*from tt3
第三篇:WordPress使用SQL語句批量替換修改文章內(nèi)容信息 Hu(本站推薦)
WordPress使用SQL語句批量替換修改文章內(nèi)容信息
Hu
文章目錄起因你是否遇到過如下幾種狀況:
1、批量修改文章內(nèi)容:
2、批量修改文章摘要:
3、批量修改文章的作者:
4、批量修改文章評(píng)論者的網(wǎng)站URL:
5、禁用所有文章的pingback功能:
6、刪除所有文章的修訂版:
7、刪除某個(gè)評(píng)論者的所有評(píng)論:
8、替換所有評(píng)論中的敏感詞匯:
9、關(guān)閉文章評(píng)論功能(1)關(guān)閉所有舊文章的評(píng)論:(2)關(guān)閉所有文章的評(píng)論:起因
前兩天采集了一個(gè)妹子圖網(wǎng)站meizi.huhanjiang.com,結(jié)果后來圖片全部掛了,發(fā)現(xiàn)是圖片地址變化的原因,原地址將圖片全部存為了二級(jí)域名。后來通過SQL數(shù)據(jù)庫語言批量修改了文章內(nèi)容,圖片得到了恢復(fù)。在此分享一下相關(guān)方法: 你是否遇到過如下幾種狀況:
博客更換域名,博客文章的內(nèi)容也要跟著換 使用的圖片地址更換了
寫了很多文章,回過頭來想切換作者 想刪除某個(gè)可惡留言者的所有留言 想更改某個(gè)留言者所有留言的網(wǎng)站URL 想要禁用所有文章的pingback想要禁用所有文章的評(píng)論功能
所有的這些,都涉及到一個(gè)關(guān)鍵詞:批量修改。如果在WordPress后臺(tái),手動(dòng)地去一個(gè)一個(gè)修改文章內(nèi)容,相信會(huì)讓你很抓狂,對(duì)一些擁有上千篇文章的博客來說,幾乎是不可能完成任務(wù)。本文將教你如何使用SQL語句來操作你的數(shù)據(jù)庫,實(shí)現(xiàn)數(shù)據(jù)的批量修改。
如果你沒學(xué)過數(shù)據(jù)庫的相關(guān)知識(shí),肯定不知道SQL是什么,但是本文所涉及到的內(nèi)容不需要你了解數(shù)據(jù)庫的知識(shí),也不需要你精通SQL語句的編寫,你完全可以直接使用本文提到的SQL,下面我們將分條介紹各個(gè)SQL語句的功能,所有語句都使用默認(rèn)的 wp_ 表前綴,如果你的不是,請(qǐng)自行更改。
開始之前,先介紹以下如何執(zhí)行SQL語句,進(jìn)行批量操作?,F(xiàn)在一般的空間都是用PhpMyAdmin來管理數(shù)據(jù)庫,這里將以PhpMyAdmin為例來介紹如何執(zhí)行SQL語句:
進(jìn)入你的PhpMyAdmin管理頁面,然后進(jìn)入你的博客對(duì)應(yīng)的數(shù)據(jù)庫
菜單欄有個(gè) SQL 選項(xiàng),點(diǎn)擊進(jìn)去
出現(xiàn)一個(gè)SQL語句的輸入框,現(xiàn)在你就可以在里面輸入SQL語句了
輸入完畢,點(diǎn)擊 執(zhí)行,將執(zhí)行你剛才輸入的SQL語句 SQL語句執(zhí)行完畢,你的文章也被批量修改了,現(xiàn)在去看看你的文章是否都被更改了
最后提個(gè)醒:以下介紹的SQL語句都在我的博客上做過測(cè)試,但是盡管如此,操作數(shù)據(jù)庫之前都要先備份一下你的數(shù)據(jù)庫;定期備份你的數(shù)據(jù)庫是好習(xí)慣
SQL命令執(zhí)行窗口:
1、批量修改文章內(nèi)容:
如果你想替換之前寫過的所有文章中的某些內(nèi)容,如更換博客的名稱,更換博客的網(wǎng)址,更換文章配圖的鏈接等等,你可以使用以下SQL語句:12 12
第四篇: 如何批量刪除電子試卷答案的WPS文字技巧
下面先就拿個(gè)例子一起來看看吧!如圖,這是我手中的一套試卷,全部為單選題,答案已經(jīng)標(biāo)記在了每道題的后面
解決方法如下:
1、使用快捷鍵CTRL+H,調(diào)出替換工具
2、在“查找內(nèi)容”中填寫通配符“(^$)”,要注意括號(hào)中有沒有空格,兩者必須要匹配,在“替換為 ”中填寫“()”,這里括號(hào)中根據(jù)文檔,要有一個(gè)空格
3、點(diǎn)擊全部替換,就出現(xiàn)下面的效果了:
4、這個(gè)方法最適合用在處理單項(xiàng)選題上面,如果是多選題,在查找時(shí)要輸入多個(gè)“$”
第五篇:視圖的定義刪除等的例題及SQL語句
實(shí)驗(yàn)四:視圖
一、實(shí)驗(yàn)?zāi)康?、掌握視圖的定義與維護(hù)操作
2、加深對(duì)視圖在關(guān)系數(shù)據(jù)庫中的作用的理解。
二、實(shí)驗(yàn)環(huán)境
已安裝SQL Server 2005 企業(yè)版的計(jì)算機(jī);
三、實(shí)驗(yàn)內(nèi)容
以數(shù)據(jù)庫原理實(shí)驗(yàn)1數(shù)據(jù)為基礎(chǔ),請(qǐng)使用T-SQL 語句實(shí)現(xiàn)進(jìn)行以下操作:
1、創(chuàng)建一個(gè)視圖,該視圖只含上??蛻粜畔ⅲ纯蛻籼?hào)、客戶姓名、住址。
create view kh
as select cust_id,cust_name,addr
from customer where addr='上海'
2、對(duì)視圖添加一條記錄數(shù)據(jù)。(注意:分別查看customer表和該視圖的結(jié)果。)
insert into kh
values('c0021','李陽','上海','0100888888')
3、刪除視圖中所有姓“王”的客戶數(shù)據(jù)。
delete from kh where cust_name like '王%'
4、通過視圖修改表內(nèi)某一客戶的姓名。
update kh set cust_name='萬華' where cust_name='李勇'
5、有兩個(gè)基本表employee和sales,創(chuàng)建一個(gè)視圖,該視圖包含相同業(yè)務(wù)員的編號(hào)、姓名、訂單號(hào)、銷售總金額。
1.create view ywy as select sale_id,emp_name,order_no,tot_amt from employee,sales where employee.emp_no=sales.sale_id6、將上述視圖中訂單號(hào)為10001的記錄的銷售總金額改為60000。
update ywy set tot_amt=6000 where order_no='10001'
7、給上述視圖添加一條記錄數(shù)據(jù)。
2.insert into ywy values('E0005','張三','1236',25000)
8、刪除上述視圖。
9、drop view ywy