------------------------------------------------------------------------------
1.下載下傳mysql子產品(client)
2.連接配接
var db=mysql.createConnection(host, port, user, password, database)//?
3.查詢
db.query(SQL, (err, data)=>{})
4.SQL語句
增删改查
------------------------------------------------------------------------------
增-INSERT
INSERT INTO 表 (字段清單) VALUES(值清單)
INSERT INTO `user_table` (`ID`, `username`, `password`) VALUES(0, 'blue2', '987654');
删-DELETE
改-UPDATE
查-SELECT
SELECT 什麼 FROM 表
SELECT * FROM `user_table`;
SQL标準寫法:
1.關鍵字大寫
2.庫、表、字段需要加上``
------------------------------------------------------------------------------
使用sql語句查詢時難免會觸及一些傳值的問題,這時我們可以用${}來傳值,如
`SELECT * FROM admin_table WHERE username='${變量名}'`
------------------------------------------------------------------------------
node.js:怎樣同時執行多條SQLs,且隻有一個回調
node.js很大的特點就是事件驅動、非阻塞和異步執行,很多地方都需要回調處理。在一些複雜業務中,會出現由于回調處理引起的代碼多層嵌套,其可讀性和感觀,對一些開發者來說,顯得不适應,甚至惡心。 進而引起口水戰, 甚至于否定node.js。多層嵌套的代碼組織方式,顯然是不可取的, 但并不是說事件驅動、非阻塞、異步執行和回調處理等不好,這些恰恰是程式設計的核心思想,在編碼上對開發者有一定的要求和限制,需要對業務開發進行分析解耦,進而更好的組織代碼讓其看起來更加簡練。是以,觀念上需要改變和适應。言歸正傳,下面聊一聊mysql-queries。
顧名思義,mysql-queries就是為mysql簡單地執行多條SQLs的node.js庫。其特點在于無需多層嵌套,且隻有一個回調,進而使代碼更加簡潔。下面通過執行個體示範一下,比較傳統的方式和mysql-queries在編碼上的差異。
執行個體
例如同時執行下面三條SQLs:
var sqls = ['SELECT * FROM prod_unit WHERE NAME=? limit 1','INSERT INTO prod_unit(name) values(?)','INSERT INTO product(name, unit_id, price) VALUES(?, ?, ?)'];
傳統的做法
var mysql = require('mysql'),
conf={
host:'localhost',
user:'nodejs',
password:'nodejs',
database:'nodejs',
port:3306},
conn=mysql.createConnection(conf);
conn.connect();
conn.query(sqls[0], [params.unit_name], function(err0, res0) {if(err0) {
console.log(err0);
}else{
conn.query(sqls[1], [params.unit_name], function(err1, res1) {if(err1) {
console.log(err1);
}else{
conn.query(sqls[2], [params.name, params.type_id, params.unit_id, params.price], function(err2, res2) {if(err2) {
console.log(err2);
}else{//TODO something
}
});
}
});
}
});
使用mysql-queries
//實際使用中可以在應用啟動時進行初始化(隻需執行一次)
require('mysql-queries').init(conf);//執行多條SQLs
var mq = require('mysql-queries');
mq.queries(sqls, [
[params.unit_name],
[params.unit_name],
[params.name, params.type_id, params.unit_id, params.price]
],function(err, results) {if(err) {
console.log(err);
}else{//"results"為數組,其為多條SQL的執行結果.
console.log(results);
}
});
進階用法--根據前面SQL的執行結果,判斷是否執行目前SQL
例如上述SQLs,在新增商品時允許自定義機關,如果機關不存在,建立商品機關。否則,直接新增商品。
mq.queries(sqls, [
[params.unit_name],
[params.unit_name],
[params.name, params.type_id, params.unit_id, params.price]
], {
skip:function(i, arg, results) { //skip判斷是否忽略目前SQL的執行,傳回true忽略,false不忽略
var skip = false;//i為SQLs的索引号
switch(i) {case 1://根據第1條SQL的結果,判斷是否忽略執行第2條SQL
skip = results[0].length !== 0;break;case 2://如果第二條被執行,其結果中的"insertId"将作為第3條SQL的參數
if(results[0].length === 0) {
arg[2] = results[1].insertId;
}break;
}returnskip;
}
},function(err, results) {if(err) {
console.log(err);
}else{//"results"為數組,其為多條SQL的執行結果.
console.log(results);
}
});
另外
mysql-queries除了上述對代碼的簡化外, 其還采用了資料源和事務處理, 進而提高了開發效率和實用性,給資料庫操作帶來了很大的便利。