校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > mysql從一張表查詢批量數據并插入到另一表中的完整實例

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

熱門標簽:天智外呼系統 北京人工外呼系統價錢 400電話鄭州申請 地圖標注被騙三百怎么辦 云南語音外呼系統平臺 房產智能外呼系統品牌 常州電銷外呼系統一般多少錢 福州呼叫中心外呼系統哪家好 沃克斯電梯外呼線路圖

說在前面

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

錯誤的 for 循環版本

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

for(let i=0;iviews.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', '后臺','產品'];	//這里是郵件相關代碼
  let group = allGroup[selfgroup - 1];
  let mailmsg = "您好," + group + "組通過人員表已提交,請您盡快審核!";
  mail.mailepass(mailmsg);
  res.write(JSON.stringify({
   style:1,
   msg:"已將名單提交,待管理員審核!"
  }));
  res.end();
  })
 })
}

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

改進的 for 循環版本

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', '后臺', '產品'];
   let group = allGroup[selfgroup - 1];
   let mailmsg = "您好," + group + "組通過人員表已提交,請您盡快審核!";
   mail.mailepass(mailmsg);
   res.write(JSON.stringify({
    style: 1,
    msg: "已將名單提交,待管理員審核!"
   }));
   res.end();
  }
 })
} 

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

改進版

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

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', '后臺', '產品'];
 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([列值],[列值])),([列值],[列值])),([列值],[列值]));

總結

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

您可能感興趣的文章:
  • 一篇文章弄懂MySQL查詢語句的執行過程
  • 詳解MySQL 查詢語句的執行過程
  • Python使用sql語句對mysql數據庫多條件模糊查詢的思路詳解
  • mysql查詢的控制語句圖文詳解
  • Mysql將查詢結果集轉換為JSON數據的實例代碼
  • 使用Visual Studio Code連接MySql數據庫并進行查詢
  • MySQL查詢優化之查詢慢原因和解決技巧
  • mysql聚合統計數據查詢緩慢的優化方法
  • MySQL多表查詢的具體實例
  • 分析mysql中一條SQL查詢語句是如何執行的

標簽:徐州 鹽城 沈陽 移動 黔東 珠海 沈陽 拉薩

巨人網絡通訊聲明:本文標題《mysql從一張表查詢批量數據并插入到另一表中的完整實例》,本文關鍵詞  mysql,從,一張,表,查詢,批量,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《mysql從一張表查詢批量數據并插入到另一表中的完整實例》相關的同類信息!
  • 本頁收集關于mysql從一張表查詢批量數據并插入到另一表中的完整實例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 双鸭山市| 兴国县| 女性| 邳州市| 哈尔滨市| 阜新| 九龙城区| 北辰区| 寿阳县| 安丘市| 永登县| 拜城县| 青州市| 西昌市| 繁峙县| 大冶市| 湘阴县| 吴堡县| 贞丰县| 娱乐| 久治县| 土默特右旗| 石台县| 苏尼特右旗| 泽州县| 焉耆| 罗山县| 屯门区| 华安县| 临澧县| 陈巴尔虎旗| 巴马| 伊吾县| 天全县| 全南县| 黔西| 武清区| 永顺县| 泾阳县| 金昌市| 波密县|