最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql從一張表查詢批量數(shù)據(jù)并插入到另一表中的完整實例

 更新時間:2021年01月06日 10:55:34   作者:gaoshanyangzhi_1999  
這篇文章主要給大家介紹了關(guān)于mysql從一張表查詢批量數(shù)據(jù)并插入到另一表中的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

說在前面

nodejs 讀取數(shù)據(jù)庫是一個異步操作,所以在數(shù)據(jù)庫還未讀取到數(shù)據(jù)之前,就會繼續(xù)往下執(zhí)行代碼。
最近寫東西時,需要對數(shù)據(jù)庫進行批量數(shù)據(jù)的查詢后,insert到另一表中。
說到批量操作,讓人最容易想到的是for循環(huán)。

錯誤的 for 循環(huán)版本

先放出代碼,提前說明一下,在這里封裝了sql操作:sql.sever(數(shù)據(jù)庫連接池,sql語句拼接函數(shù),回調(diào)函數(shù))

for(let i=0;i<views.xuehao.length;i++){
	sql.sever(pool,sql.select(["name"],"registryinformation",["xuehao="+sql.escape(views.xuehao[i])]),function(data){
  sql.sever(pool,sql.insert("personnelqueue",["xuehao","name","selfgroup","time"],[sql.escape(views.xuehao[i]),data[0].name,selfgroup,'NOW()'],true),function(){
  let allGroup = ['Android', 'ios', 'Web', '后臺','產(chǎn)品'];	//這里是郵件相關(guān)代碼
  let group = allGroup[selfgroup - 1];
  let mailmsg = "您好," + group + "組通過人員表已提交,請您盡快審核!";
  mail.mailepass(mailmsg);
  res.write(JSON.stringify({
   style:1,
   msg:"已將名單提交,待管理員審核!"
  }));
  res.end();
  })
 })
}

上面代碼中,是先進行數(shù)據(jù)查詢再進行數(shù)據(jù)的插入,(在這里假定有2條數(shù)據(jù))按照常理,我們想的執(zhí)行順序是:查詢 插入 查詢 插入。然而,并非我們所想那么簡單,雖然插入操作也確實在數(shù)據(jù)庫查詢的回調(diào)中寫的,但是實際的順序是:查詢 查詢,一旦直接進行了兩次查詢,想當然后面的代碼直接報錯了。沒來得及回調(diào)時,已經(jīng)執(zhí)行了第二次循環(huán)。

改進的 for 循環(huán)版本

mysql 用一條語句可以完成查詢并插入,格式為:INSERT IGNORE INTO 插入表表名 (item1,item2) SELECT item1,item2 FROM 查詢表表名 WHERE,于是乎,便想到了下面的解決方案。

for (let i = 0; i < views.xuehao.length; i++) {
 sql.sever(pool, 'INSERT IGNORE INTO personnelqueue (xuehao,name,selfgroup,time) SELECT xuehao,name,selfgroup,NOW() FROM registryinformation WHERE xuehao=' + sql.escape(views.xuehao[i]) + ' and pass=' + state, function () {
  if (i == views.xuehao.length - 1) {
   let allGroup = ['Android', 'ios', 'Web', '后臺', '產(chǎn)品'];
   let group = allGroup[selfgroup - 1];
   let mailmsg = "您好," + group + "組通過人員表已提交,請您盡快審核!";
   mail.mailepass(mailmsg);
   res.write(JSON.stringify({
    style: 1,
    msg: "已將名單提交,待管理員審核!"
   }));
   res.end();
  }
 })
} 

這樣,數(shù)據(jù)庫操作正確,目的達到了。但是仔細想來,這樣做還是有缺陷的。如果數(shù)據(jù)量小還好說,但若數(shù)據(jù)量大時,這樣導(dǎo)致程序和數(shù)據(jù)庫建立多次連接,會增加服務(wù)器負荷。

改進版

結(jié)合上一次的缺陷,顧名思義,這次我們要減少程序與數(shù)據(jù)庫連接次數(shù)。于是,我們不再將插入和查詢寫到一起,而是將其分開,進行批量的插詢,從而利用所查數(shù)據(jù)批量插入。代碼如下:

let sqlString = 'SELECT xuehao,name,selfgroup FROM registryinformation WHERE pass=' + state + ' AND (xuehao=' + sql.escape(views.xuehao[0]);
for (let i = 1; i < views.xuehao.length; i++) {
 sqlString += ' OR xuehao=' + sql.escape(views.xuehao[i]);
}
sqlString = sqlString + ')';
sql.sever(pool, sqlString, function (data) {
 //拼接插入sql語句
 let istSqlStr = 'INSERT IGNORE INTO personnelqueue (xuehao,name,selfgroup,time) VALUES (' + data[0].xuehao + ',' + sql.escape(data[0].name) + ',' + data[0].selfgroup + ',NOW())';
 for (let j = 1; j < data.length; j++) {
 istSqlStr += ',(' + data[j].xuehao + ',' + sql.escape(data[j].name) + ',' + data[j].selfgroup + ',' + 'NOW())';
 }
 sql.sever(pool, istSqlStr, function () {
 let allGroup = ['Android', 'ios', 'Web', '后臺', '產(chǎn)品'];
 let group = allGroup[selfgroup - 1];
 let mailmsg = "您好," + group + "組通過人員表已提交,請您盡快審核!";
 mail.mailepass(mailmsg);
 res.write(JSON.stringify({
  style: 1,
  msg: "已將名單提交,待管理員審核!"
 }));
 res.end();
 })
})

補充

批量查詢語法(在這里and與or進行了混用) SELECT 列名,列名 FROM 表名 WHERE 條件 AND (item1=‘xxx' OR item1=‘yyy');
一條語句進行批量插入語法 INSERT INTO [ 表名 ]([ 列名] ,[ 列名 ]) VALUES([列值],[列值])),([列值],[列值])),([列值],[列值]));

總結(jié)

到此這篇關(guān)于mysql從一張表查詢批量數(shù)據(jù)并插入到另一表中的文章就介紹到這了,更多相關(guān)mysql查詢批量數(shù)據(jù)插入到另一表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mysql使用索引實現(xiàn)查詢優(yōu)化

    Mysql使用索引實現(xiàn)查詢優(yōu)化

    索引的目的在于提高查詢效率,本文給大家介紹Mysql使用索引實現(xiàn)查詢優(yōu)化技巧,涉及到索引的優(yōu)點等方面的知識點,非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧
    2016-07-07
  • MySQL與PHP的基礎(chǔ)與應(yīng)用專題之表連接

    MySQL與PHP的基礎(chǔ)與應(yīng)用專題之表連接

    MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL?AB?公司開發(fā),屬于?Oracle?旗下產(chǎn)品。MySQL?是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,本系列將帶你掌握php與mysql的基礎(chǔ)應(yīng)用,本篇表連接開始
    2022-02-02
  • mysql8重置root用戶密碼的完整步驟

    mysql8重置root用戶密碼的完整步驟

    這篇文章主要給大家分享介紹了關(guān)于mysql8重置root用戶密碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • Mysql建庫字符集和排序規(guī)則及說明

    Mysql建庫字符集和排序規(guī)則及說明

    這篇文章主要介紹了Mysql建庫字符集和排序規(guī)則及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • mysql delete limit 使用方法詳解

    mysql delete limit 使用方法詳解

    今天研究cms系統(tǒng)的時候發(fā)現(xiàn),delete 語句后面有個limit,一直都是select查詢的時候才使用,不懂為什么要用這個,正好就百度一下為大家分享下delete中使用limit方法與有點
    2014-11-11
  • linux(Centos7)下安裝mysql8.0.18的教程圖解

    linux(Centos7)下安裝mysql8.0.18的教程圖解

    這篇文章主要介紹了linux(Centos7)安裝mysql8.0.18的教程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • MySQL創(chuàng)建索引需要了解的

    MySQL創(chuàng)建索引需要了解的

    這篇文章主要介紹了MySQL創(chuàng)建索引需要了解的知識,幫助大家更正確的使用MySQL的索引,感興趣的朋友可以了解下
    2021-04-04
  • 詳解如何在阿里云服務(wù)器安裝Mysql數(shù)據(jù)庫

    詳解如何在阿里云服務(wù)器安裝Mysql數(shù)據(jù)庫

    這篇文章主要介紹了詳解如何在阿里云服務(wù)器安裝Mysql數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • MySQL跨服務(wù)器數(shù)據(jù)映射的實現(xiàn)

    MySQL跨服務(wù)器數(shù)據(jù)映射的實現(xiàn)

    本文主要介紹了MySQL跨服務(wù)器數(shù)據(jù)映射的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • 解決ERROR?1129?(HY000):?Host?‘xxx‘?is?blocked?because?of?many問題

    解決ERROR?1129?(HY000):?Host?‘xxx‘?is?blocked?because?

    這篇文章主要介紹了解決ERROR?1129?(HY000):?Host?‘xxx‘?is?blocked?because?of?many問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評論

遂溪县| 桐梓县| 桃江县| 浦城县| 东辽县| 镇平县| 古丈县| 精河县| 中山市| 精河县| 马关县| 南昌市| 信宜市| 尉犁县| 邵阳县| 张家界市| 南城县| 定州市| 肥乡县| 北海市| 松溪县| 江门市| 秦安县| 景谷| 青浦区| 竹溪县| 高陵县| 客服| 周口市| 灌阳县| 丹凤县| 乌鲁木齐县| 航空| 侯马市| 南江县| 沙雅县| 南川市| 吉木萨尔县| 怀安县| 正镶白旗| 都江堰市|