安装MySql模块:mysql
npm install mysql sql
建立链接:数据库
1 const mysql = require('mysql') 2 3 // 链接 mysql 服务器 4 const connection = mysql.createConnection({ 5 host: '127.0.0.1', 6 user: 'root',//数据库访问的用户名 7 password: '123456',//数据库访问的密码 8 port: '3306',//数据库端口号 9 database: 'XXX',//数据库名称 10 }) 11 // 执行SQL 12 connection.query(sql, function (err, result) { 13 err // 错误信息 14 result // 结果 15 }) 16 // 销毁链接 | 因为 JS 是异步的,因此当前代码会在执行 SQL 以前就销毁了链接 17 connection.destroy()
用 createConnection 建立 Mysql 链接,每执行一次 connection.query 都是一个全新的链接,会形成一个资源的极大浪费,下降性能。npm
链接池是另外的一种执行方法,它一次性的建立了多个链接,而后根据客户端的查询,自动的 分发、复用、管理 这些链接。数组
1 const mysql = require('mysql') 2 3 //建立链接池 4 const pool = mysql.createPool({ 5 host: '127.0.0.1', 6 user: 'root',//数据库访问的用户名 7 password: '123456',//数据库访问的密码 8 port: '3306',//数据库端口号 9 database: 'XXX',//数据库名称 10 }) 11 12 const db = { 13 sqlQuery(sql, values) { 14 return new Promise((resolve, reject) => { 15 pool.getConnection((err, connection) => { 16 if (err) { 17 reject(err) 18 } else { 19 if (values) { 20 connection.query(sql, values, (err, rows) => { 21 if (err) { 22 reject(err) 23 } else { 24 resolve(rows) 25 } 26 connection.release() 27 }); 28 } else { 29 connection.query(sql, (err, rows) => { 30 if (err) { 31 reject(err) 32 } else { 33 resolve(rows) 34 } 35 connection.release() 36 }); 37 } 38 } 39 }) 40 }) 41 } 42 }
MySql查询变量用一个 ?号 做为占位符(防止SQL注入):服务器
1 var query = 'UPDATE users SET foo = ?, bar = ?, baz = ? WHERE id = ?', 2 value = ['a', 'b', 'c', userId]; 3 connection.query(query, value, (error, results, fields) => { /* ... */ });
第一个参数 query 是一个字符串,是查询的 sql 语句,含有占位符。异步
第二个参数 value 是一个数组,含有全部占位符的值。性能
标识符(数据库、表、列名)用两个 ?号 作占位符(即 ?? ),除此以外,能够将标识符的名字当成 query 变量一块儿传进值列表中:ui
1 var query = 'UPDATE ?? SET foo = ?, bar = ?, baz = ? WHERE id = ?', 2 value = ['users', 'a', 'b', 'c', userId]; 3 connection.query(query, value, (error, results, fields) => { /* ... */ });