50.Node.js 连接 MySQL

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

安装驱动

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

$ 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)
  bigNumberStringssupportBigNumbers和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 文件导入数据库后,执行以下代码即可查询出数据:

查询数据

执行以下命令输出就结果为:
$ node test.js
--------------------------SELECT---------------------------- [ RowDataPacket { id: 1, name: 'Google', url: 'https://www.google.cm/', alexa: 1, country: 'USA' }, RowDataPacket { id: 2, name: '淘宝', url: 'https://www.taobao.com/', alexa: 13, country: 'CN' }, RowDataPacket { id: 3, name: '菜鸟教程', url: 'http://www.runoob.com/', alexa: 4689, country: 'CN' }, RowDataPacket { id: 4, name: '微博', url: 'http://weibo.com/', alexa: 20, country: 'CN' }, RowDataPacket { id: 5, name: 'Facebook', url: 'https://www.facebook.com/', alexa: 3, country: 'USA' } ] ------------------------------------------------------------

插入数据

我们可以向数据表 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();

 

执行以下命令输出就结果为:
$ node test.js
--------------------------INSERT---------------------------- INSERT ID: OkPacket { fieldCount: 0, affectedRows: 1, insertId: 6, serverStatus: 2, warningCount: 0, message: '', protocol41: true, changedRows: 0 } -----------------------------------------------------------------

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

更新数据

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

 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();

 

执行以下命令输出就结果为:
--------------------------UPDATE----------------------------
UPDATE affectedRows 1 -----------------------------------------------------------------

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

删除数据

我们可以使用以下代码来删除 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();

 

执行以下命令输出就结果为:
--------------------------DELETE----------------------------
DELETE affectedRows 1 -----------------------------------------------------------------

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

转载于:https://www.cnblogs.com/sharpest/p/8073810.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值