婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > mysql從一張表查詢(xún)批量數(shù)據(jù)并插入到另一表中的完整實(shí)例

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

熱門(mén)標(biāo)簽:天智外呼系統(tǒng) 北京人工外呼系統(tǒng)價(jià)錢(qián) 400電話(huà)鄭州申請(qǐng) 地圖標(biāo)注被騙三百怎么辦 云南語(yǔ)音外呼系統(tǒng)平臺(tái) 房產(chǎn)智能外呼系統(tǒng)品牌 常州電銷(xiāo)外呼系統(tǒng)一般多少錢(qián) 福州呼叫中心外呼系統(tǒng)哪家好 沃克斯電梯外呼線(xiàn)路圖

說(shuō)在前面

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

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

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

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

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

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

mysql 用一條語(yǔ)句可以完成查詢(xún)并插入,格式為:INSERT IGNORE INTO 插入表表名 (item1,item2) SELECT item1,item2 FROM 查詢(xún)表表名 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', '后臺(tái)', '產(chǎn)品'];
   let group = allGroup[selfgroup - 1];
   let mailmsg = "您好," + group + "組通過(guò)人員表已提交,請(qǐng)您盡快審核!";
   mail.mailepass(mailmsg);
   res.write(JSON.stringify({
    style: 1,
    msg: "已將名單提交,待管理員審核!"
   }));
   res.end();
  }
 })
} 

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

改進(jìn)版

結(jié)合上一次的缺陷,顧名思義,這次我們要減少程序與數(shù)據(jù)庫(kù)連接次數(shù)。于是,我們不再將插入和查詢(xún)寫(xiě)到一起,而是將其分開(kāi),進(jìn)行批量的插詢(xún),從而利用所查數(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語(yǔ)句
 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', '后臺(tái)', '產(chǎn)品'];
 let group = allGroup[selfgroup - 1];
 let mailmsg = "您好," + group + "組通過(guò)人員表已提交,請(qǐng)您盡快審核!";
 mail.mailepass(mailmsg);
 res.write(JSON.stringify({
  style: 1,
  msg: "已將名單提交,待管理員審核!"
 }));
 res.end();
 })
})

補(bǔ)充

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

總結(jié)

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

您可能感興趣的文章:
  • 一篇文章弄懂MySQL查詢(xún)語(yǔ)句的執(zhí)行過(guò)程
  • 詳解MySQL 查詢(xún)語(yǔ)句的執(zhí)行過(guò)程
  • Python使用sql語(yǔ)句對(duì)mysql數(shù)據(jù)庫(kù)多條件模糊查詢(xún)的思路詳解
  • mysql查詢(xún)的控制語(yǔ)句圖文詳解
  • Mysql將查詢(xún)結(jié)果集轉(zhuǎn)換為JSON數(shù)據(jù)的實(shí)例代碼
  • 使用Visual Studio Code連接MySql數(shù)據(jù)庫(kù)并進(jìn)行查詢(xún)
  • MySQL查詢(xún)優(yōu)化之查詢(xún)慢原因和解決技巧
  • mysql聚合統(tǒng)計(jì)數(shù)據(jù)查詢(xún)緩慢的優(yōu)化方法
  • MySQL多表查詢(xún)的具體實(shí)例
  • 分析mysql中一條SQL查詢(xún)語(yǔ)句是如何執(zhí)行的

標(biāo)簽:徐州 鹽城 沈陽(yáng) 移動(dòng) 黔東 珠海 沈陽(yáng) 拉薩

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql從一張表查詢(xún)批量數(shù)據(jù)并插入到另一表中的完整實(shí)例》,本文關(guān)鍵詞  mysql,從,一張,表,查詢(xún),批量,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql從一張表查詢(xún)批量數(shù)據(jù)并插入到另一表中的完整實(shí)例》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于mysql從一張表查詢(xún)批量數(shù)據(jù)并插入到另一表中的完整實(shí)例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 榕江县| 东光县| 哈密市| 定边县| 罗山县| 邮箱| 浪卡子县| 旬阳县| 昭苏县| 枣强县| 青海省| 京山县| 江华| 左贡县| 盐山县| 乌拉特前旗| 辽中县| 鄂伦春自治旗| 邳州市| 德格县| 韶关市| 潍坊市| 简阳市| 江孜县| 扶沟县| 厦门市| 桂平市| 龙江县| 保康县| 灵石县| 疏附县| 子长县| 汽车| 安远县| 龙川县| 福泉市| 闽清县| 宁明县| 田阳县| 武清区| 临沂市|