转自:http://www.runoob.com/nodejs/nodejs-express-framework.html

安装驱动

本教程使用了淘宝定制的 cnpm 命令进行安装:

  1. $ cnpm install mysql

连接数据库

在以下实例中修改根据你的实际配置修改数据库用户名、及密码及数据库名:

test.js 文件代码:

  1. var mysql = require('mysql');
  2. var connection = mysql.createConnection({
  3. host : 'localhost',
  4. user : 'root',
  5. password : '123456',
  6. database : 'test'
  7. });
  8.  
  9. connection.connect();
  10.  
  11. connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
  12. if (error) throw error;
  13. console.log('The solution is: ', results[0].solution);
  14. });
执行以下命令输出就结果为:
$ node test.js
The solution is: 2

数据库连接参数说明:

参数 描述
host 主机地址 (默认:localhost)
  user 用户名
  password 密码
  port 端口号 (默认:3306)
  database 数据库名
  charset 连接字符集(默认:'UTF8_GENERAL_CI',注意字符集的字母都要大写)
  localAddress 此IP用于TCP连接(可选)
  socketPath 连接到unix域路径,当使用 host 和 port 时会被忽略
  timezone 时区(默认:'local')
  connectTimeout 连接超时(默认:不限制;单位:毫秒)
  stringifyObjects 是否序列化对象
  typeCast 是否将列值转化为本地JavaScript类型值 (默认:true)
  queryFormat 自定义query语句格式化方法
  supportBigNumbers 数据库支持bigint或decimal类型列时,需要设此option为true (默认:false)
  bigNumberStrings supportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回(默认:false)
  dateStrings 强制timestamp,datetime,data类型以字符串类型返回,而不是JavaScript Date类型(默认:false)
  debug 开启调试(默认:false)
  multipleStatements 是否许一个query中有多个MySQL语句 (默认:false)
  flags 用于修改连接标志
  ssl 使用ssl参数(与crypto.createCredenitals参数格式一至)或一个包含ssl配置文件名称的字符串,目前只捆绑Amazon RDS的配置文件

更多说明可参见:https://github.com/mysqljs/mysql


数据库操作( CURD )

  1. /*
  2. Navicat MySQL Data Transfer
  3.  
  4. Source Server : 127.0.0.1
  5. Source Server Version : 50621
  6. Source Host : localhost
  7. Source Database : RUNOOB
  8.  
  9. Target Server Version : 50621
  10. File Encoding : utf-8
  11.  
  12. Date: 05/18/2016 11:44:07 AM
  13. */
  14.  
  15. SET NAMES utf8;
  16. SET FOREIGN_KEY_CHECKS = 0;
  17.  
  18. -- ----------------------------
  19. -- Table structure for `websites`
  20. -- ----------------------------
  21. DROP TABLE IF EXISTS `websites`;
  22. CREATE TABLE `websites` (
  23. `id` int(11) NOT NULL AUTO_INCREMENT,
  24. `name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',
  25. `url` varchar(255) NOT NULL DEFAULT '',
  26. `alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',
  27. `country` char(10) NOT NULL DEFAULT '' COMMENT '国家',
  28. PRIMARY KEY (`id`)
  29. ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
  30.  
  31. -- ----------------------------
  32. -- Records of `websites`
  33. -- ----------------------------
  34. BEGIN;
  35. INSERT INTO `websites` VALUES ('1', 'Google', 'https://www.google.cm/', '1', 'USA'), ('2', '淘宝', 'https://www.taobao.com/', '13', 'CN'), ('3', '菜鸟教程', 'http://www.runoob.com/', '4689', 'CN'), ('4', '微博', 'http://weibo.com/', '20', 'CN'), ('5', 'Facebook', 'https://www.facebook.com/', '3', 'USA');
  36. COMMIT;
  37.  
  38. SET FOREIGN_KEY_CHECKS = 1;

查询数据

  1. var mysql = require('mysql');
  2.  
  3. var connection = mysql.createConnection({
  4. host : 'localhost',
  5. user : 'root',
  6. password : '123456',
  7. port: '3306',
  8. database: 'test',
  9. });
  10.  
  11. connection.connect();
  12.  
  13. var sql = 'SELECT * FROM websites';
  14. //查
  15. connection.query(sql,function (err, result) {
  16. if(err){
  17. console.log('[SELECT ERROR] - ',err.message);
  18. return;
  19. }
  20.  
  21. console.log('--------------------------SELECT----------------------------');
  22. console.log(result);
  23. console.log('------------------------------------------------------------\n\n');
  24. });
  25.  
  26. connection.end();

将上面我们提供的 SQL 文件导入数据库后,执行以下代码即可查询出数据:

查询数据

执行以下命令输出就结果为:
  1. $ node test.js
  2. --------------------------SELECT----------------------------
  3. [ RowDataPacket {
  4. id: 1,
  5. name: 'Google',
  6. url: 'https://www.google.cm/',
  7. alexa: 1,
  8. country: 'USA' },
  9. RowDataPacket {
  10. id: 2,
  11. name: '淘宝',
  12. url: 'https://www.taobao.com/',
  13. alexa: 13,
  14. country: 'CN' },
  15. RowDataPacket {
  16. id: 3,
  17. name: '菜鸟教程',
  18. url: 'http://www.runoob.com/',
  19. alexa: 4689,
  20. country: 'CN' },
  21. RowDataPacket {
  22. id: 4,
  23. name: '微博',
  24. url: 'http://weibo.com/',
  25. alexa: 20,
  26. country: 'CN' },
  27. RowDataPacket {
  28. id: 5,
  29. name: 'Facebook',
  30. url: 'https://www.facebook.com/',
  31. alexa: 3,
  32. country: 'USA' } ]
  33. ------------------------------------------------------------

插入数据

我们可以向数据表 websties 插入数据:

插入数据

  1. var mysql = require('mysql');
  2.  
  3. var connection = mysql.createConnection({
  4. host : 'localhost',
  5. user : 'root',
  6. password : '123456',
  7. port: '3306',
  8. database: 'test',
  9. });
  10.  
  11. connection.connect();
  12.  
  13. var addSql = 'INSERT INTO websites(Id,name,url,alexa,country) VALUES(0,?,?,?,?)';
  14. var addSqlParams = ['菜鸟工具', 'https://c.runoob.com','23453', 'CN'];
  15. //增
  16. connection.query(addSql,addSqlParams,function (err, result) {
  17. if(err){
  18. console.log('[INSERT ERROR] - ',err.message);
  19. return;
  20. }
  21.  
  22. console.log('--------------------------INSERT----------------------------');
  23. //console.log('INSERT ID:',result.insertId);
  24. console.log('INSERT ID:',result);
  25. console.log('-----------------------------------------------------------------\n\n');
  26. });
  27.  
  28. connection.end();
执行以下命令输出就结果为:
  1. $ node test.js
  2. --------------------------INSERT----------------------------
  3. INSERT ID: OkPacket {
  4. fieldCount: 0,
  5. affectedRows: 1,
  6. insertId: 6,
  7. serverStatus: 2,
  8. warningCount: 0,
  9. message: '',
  10. protocol41: true,
  11. changedRows: 0 }
  12. -----------------------------------------------------------------

执行成功后,查看数据表,即可以看到添加的数据:

更新数据

我们也可以对数据库的数据进行修改:

  1. var mysql = require('mysql');
  2.  
  3. var connection = mysql.createConnection({
  4. host : 'localhost',
  5. user : 'root',
  6. password : '123456',
  7. port: '3306',
  8. database: 'test',
  9. });
  10.  
  11. connection.connect();
  12.  
  13. var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?';
  14. var modSqlParams = ['菜鸟移动站', 'https://m.runoob.com',6];
  15. //改
  16. connection.query(modSql,modSqlParams,function (err, result) {
  17. if(err){
  18. console.log('[UPDATE ERROR] - ',err.message);
  19. return;
  20. }
  21. console.log('--------------------------UPDATE----------------------------');
  22. console.log('UPDATE affectedRows',result.affectedRows);
  23. console.log('-----------------------------------------------------------------\n\n');
  24. });
  25.  
  26. connection.end();
执行以下命令输出就结果为:
  1. --------------------------UPDATE----------------------------
  2. UPDATE affectedRows 1
  3. -----------------------------------------------------------------

执行成功后,查看数据表,即可以看到更新的数据:

删除数据

我们可以使用以下代码来删除 id 为 6 的数据:

删除数据

  1. var mysql = require('mysql');
  2.  
  3. var connection = mysql.createConnection({
  4. host : 'localhost',
  5. user : 'root',
  6. password : '123456',
  7. port: '3306',
  8. database: 'test',
  9. });
  10.  
  11. connection.connect();
  12.  
  13. var delSql = 'DELETE FROM websites where id=6';
  14. //删
  15. connection.query(delSql,function (err, result) {
  16. if(err){
  17. console.log('[DELETE ERROR] - ',err.message);
  18. return;
  19. }
  20.  
  21. console.log('--------------------------DELETE----------------------------');
  22. console.log('DELETE affectedRows',result.affectedRows);
  23. console.log('-----------------------------------------------------------------\n\n');
  24. });
  25.  
  26. connection.end();
执行以下命令输出就结果为:
  1. --------------------------DELETE----------------------------
  2. DELETE affectedRows 1
  3. -----------------------------------------------------------------

执行成功后,查看数据表,即可以看到 id=6 的数据已被删除:

50.Node.js 连接 MySQL的更多相关文章

  1. Node.js连接Mysql,并把连接集成进Express中间件中

    引言 在node.js连接mysql的过程,我们通常有两种连接方法,普通连接和连接池. 这两种方法较为常见,当我们使用express框架时还会选择使用中间express-myconnection,可以 ...

  2. Node.js 连接 MySQL 并进行数据库操作

    Node.js 连接 MySQL 并进行数据库操作  按照这篇操作mysql的指引,我远程操作了我另一台电脑的mysql数据库. var mysql = require('mysql'); var c ...

  3. Node.js连接MySQL数据库及构造JSON的正确姿势

    做一下整理,以前也很随意的引入包链接数据库,后来发现常常连接出问题,异常退出,后来使用在网上一个方法解决问题,网址由于书签丢失,抱歉不能引用了.再有就是简单的模块化下,使得目录合理点,再有就是说明一下 ...

  4. node.js连接MySQL操作及注意事项

    node.js作为服务端的js运行环境已经出现了有几年了,最近我有个朋友也在做这方面的开发,但是也是刚刚接触,遇到了很多坑.前几天他们在操作数据库的时候出现了点问题,后来我们一起看了看,其实都是nod ...

  5. Node.js 连接mySQL程序

    环境:Oracle Enterprise Linux R5U7 安装mySQL 关于离线安装,下次在尝试,目前先来在线安装,过程如下: $ rpm -qa | grep -i mysql $ wget ...

  6. Node.js连接MySQL数据库报错

    解决Node.js第一次连接MySQL数据库时出现[SELECT ERROR] - ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authen ...

  7. Node.js连接mysql报加密方式错误解决方案

    本人在学习全栈开发过程中做一个Node的web项目在连接本地MySQL8.0版本的数据库时,发现Navicat连接不上,它报了一个数据库的加密方式导致连接不上的错误,错误如下: MySQL8.0版本的 ...

  8. node.js 连接 mysql

    var mysql = require("mysql"); var connection = mysql.createConnection({ host: '127.0.0.1', ...

  9. Node.js连接Mysql

    1.安装 npm install mysql 注意要复制node_modules到当前工程的文件夹中 2.基本连接 /** * Created by Administrator on 13-12-25 ...

随机推荐

  1. angular route 与 django urls 冲突怎么解决?

    app.js var app = angular.module('app', [ 'ngResource', 'ngRoute', // 'ui.bootstrap', // 'ngResource' ...

  2. fixed说明

    http://blog.163.com/hc_ranxu/blog/static/367231822013102265151785/

  3. Centos安装masscan

    1.yum install git gcc make libpcap-devel2.git clone https://github.com/robertdavidgraham/masscan3.cd ...

  4. UCOSii任务就绪表之OSUnMapTbl[16*16]的数组是如何得到的

    我比较喜欢图,如下图: 图1: INT8U const OSUnMapTbl[]数组内的数据. 1.UCOSii的优先级相关内容 首先先介绍一个概念:优先级.UCOSii的优先级按倒叙排列,即优先级数 ...

  5. [HNOI2006]超级英雄(二分+网络流)

    [HNOI2006]超级英雄 题目描述 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目, ...

  6. C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件

    原文:C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件 这两天忙着把框架改为支持加载C++和Delphi的插件,来不及更新blog了.      原来的写的框架只支持c#插件,这个好做 ...

  7. 轻松python专题--文本

    基础篇:(取材于零基础学python) 7.1 python中的字符串简单介绍与经常使用函数 7.2 字符串常量 7.3 字符串的一般使用 7.4 改动字符串实例 7.5 文本解析 7.6 字符串格式 ...

  8. session和cookie详解

    摘要:虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一 技术.本文将详细讨论session的工作机制并且对在Java ...

  9. BZOJ2895: 球队预算

    [传送门:BZOJ2895] 简要题意: 在一个篮球联赛里,有n支球队,球队的支出是和他们的胜负场次有关系的,具体来说,第i支球队的赛季总支出是Ci*x^2+Di*y^2,Di<=Ci.(赢得多 ...

  10. BZOJ 3211 线段树+并查集

    思路: 我们很容易发现 一个数开根号 开几(很小)次 就到了1 1 再怎么开 都是1 由于这个性质 我们就可以用并查集 了 //By SiriusRen #include <cmath> ...