学习目标
- 使用 mysql 包操作 MySQL 数据库
- 使用数据库的动态网站
- 基于数据库的网站(增删改查)
使用 mysql 包
安装
npm install mysql
Hello World
var mysql = require("mysql");var connection = mysql.createConnection({host: "localhost",user: "me",password: "secret",database: "my_db"});connection.connect();connection.query("SELECT 1 + 1 AS solution", function(error, results, fields) {if (error) throw error;console.log("The solution is: ", results[0].solution);});connection.end();
增删改查
查询
基本查询:
connection.query('SELECT * FROM `books` WHERE `author` = "David"', function(error,results,fields) {// error will be an Error if one occurred during the query// results will contain the results of the query// fields will contain information about the returned results fields (if any)});
条件查询:
connection.query("SELECT * FROM `books` WHERE `author` = ?",["David"],function(error, results, fields) {// error will be an Error if one occurred during the query// results will contain the results of the query// fields will contain information about the returned results fields (if any)});
添加
var post = { id: 1, title: "Hello MySQL" };var query = connection.query("INSERT INTO posts SET ?", post, function(error,results,fields) {if (error) throw error;// Neat!});console.log(query.sql); // INSERT INTO posts SET `id` = 1, `title` = 'Hello MySQL'
删除
connection.query('DELETE FROM posts WHERE title = "wrong"', function(error,results,fields) {if (error) throw error;console.log("deleted " + results.affectedRows + " rows");});
修改
connection.query("UPDATE users SET foo = ?, bar = ?, baz = ? WHERE id = ?",["a", "b", "c", userId],function(error, results, fields) {if (error) throw error;// ...});
连接池
var mysql = require("mysql");var pool = mysql.createPool({host: "example.org",user: "bob",password: "secret",database: "my_db",connectionLimit: 10 // 默认是 10 个});pool.getConnection(function(err, connection) {// Use the connectionconnection.query("SELECT something FROM sometable", function(error,results,fields) {// 释放回连接池connection.release();// 处理错误if (error) throw error;// ...});});
封装 dbHelper.js
const mysql = require("mysql");const pool = mysql.createPool({host: "localhost",user: "root",password: "123456",database: "test",connectionLimit: 10 // 默认是 10 个});exports.query = (...args) => {// 从数组中弹出最后一个元素 callback 回调函数const callback = args.pop();pool.getConnection((err, connection) => {if (err) {return callback(err);}connection.query(...args, function(...results) {// ...results => [err, results, fields]// 释放回连接池connection.release();// 把 ...results => [err, results, fields] 展开调用 callback 继续往外抛callback(...results);});});};
