天天看點

node mysql 個人網站_Node個人學習(七)----node中的mysql

------------------------------------------------------------------------------

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除了上述對代碼的簡化外, 其還采用了資料源和事務處理, 進而提高了開發效率和實用性,給資料庫操作帶來了很大的便利。