从零开始Node.js—11mysql包的使用

前言

后端代码要实现对数据的存储、管理和维护,离不开工具数据库。
MySQL是市场上应用最广泛的开源免费数据库,非常建议学习。对于MySQL数据库介绍可以参考:安装教程,使用教程。本文的重点在express中远程使用数据库,用代码实现对MySQL中远程数据的增删改查。

一、使用mysql

若想在Node.js中操纵数据库MySQL,需要借助MySQL提供的官方包:mysql
① 安装第三方包mysql

npm install mysql

② 代码框架

// 1 引入mysql模块
const mysql = require('mysql');

// 2 配置连接信息
const connection = mysql.createConnection({
  host: '127.0.0.1', // IP地址
  user: 'root', // 用户名 默认root
  password: 'admin123', // 自己在MySQL中设置的密码
  database: 'my_db_01', // 数据库名字(不是表名)
})

// 3 建立连接
connection.connect( (err) => {
  // 连接失败
  if (err) {
    console.error('error connecting: ' + err.stack);
    return;
  }
  // 连接成功
  console.log('connected as id ' + connection.threadId);
});

// 4 增删改查
connection.query('SELECT 1 + 1 AS solution', (error, results, fields) => {
  if (error) throw error;
  console.log('The solution is: ', results[0].solution);
});

// 5 断开连接
connection.end(); 

③ 增删改查
利用函数connection .query()函数,第一个值为sql语句,可以采用?占位,第二个值为数组(若只有一个,也可不写成数组),分别填充占位,第三个为回调函数。

const sqlStr = 'select ? from users where id = ?'
connection .query( sqlStr, [v1, v2], (err, results) => {} )

二、how to 增删改查

数据库my_db_01中表users的结构如下:id为主键,数字类型,唯一标识用户,在表中设置自增;status代表数据状态:0:未注销,1:注销,默认为0
从零开始Node.js—11mysql包的使用_第1张图片

1、查找数据

查找语句SELECT somedata FROM tablename

// 查询users表中的数据
connection.query('SELECT * FROME users', (err, results) => {
  if (error) {
    console.log(error);
    return;
  }

  console.log(results); 
})

返回结果:数组

[
  RowDataPacket {    id: 1,    username: 'new_name',    password: '12345',    status: 0  },
  RowDataPacket {    id: 2,    username: 'ls',    password: 'abc123',    status: 0  },
  RowDataPacket { 	 id: 3,	   username: 'xh',    password: '65321',     status: 1 },
  RowDataPacket {    id: 4,    username: 'kc',    password: 'hwiquod',    status: 1  }
]

2、添加数据

不同写法:
INSERT INTO tablename(列名…) VALUES(列值)
INSERT INTO tablename SET 列1 = 值1, 列2 = 值2,…

const user = {username: 'ss', password: '123456'};
// 构造sql字符串
const sqlStr = 'INSERT INTO users SET?';
// 操作数据库
connection.query(sqlStr, user, (error, results) => {
  if (error) {
    console.log(error);
    return;
  }

   if (results.affectedRows === 1) {
    console.log('新增数据成功');
    console.log(results);
  }
})

返回的results:对象

OkPacket {        
  fieldCount: 0,  
  affectedRows: 1, // 被影响的列数目
  insertId: 5,
  serverStatus: 2,
  warningCount: 0,
  message: '',
  protocol41: true,
  changedRows: 0
}

修改数据

UPDATE tablename SET 列1=值1 WHERE id = 1

const sqlStr = 'UPDATE users SET status = ? WHERE id = ?';
// 将id=2的用户状态设置为1
connection.query(sqlStr, [1, 2], (error, results) => {
  if (error) {
    console.log(error);
    return;
  }
	
  if (results.affectedRows === 1) {
    console.log('删除数据成功');
    console.log(results);
  }

返回results:对象

OkPacket {
  fieldCount: 0,
  affectedRows: 1,
  insertId: 0,
  serverStatus: 2,
  warningCount: 0,
  message: '(Rows matched: 1  Changed: 0  Warnings: 0',
  protocol41: true,
  changedRows: 0
}

删除数据

DELETE FROM tablename WHERE ...

const sqlStr = 'DELETE FROM users WHERE id = ?';
// 删除id=1的用户数据
connection.query(delsql, 1, (err, results) => {
  if(err) return console.log(err);
  if(results.affectedRows === 1 ){
    console.log('删除数据成功');
    console.log(results);
  }
})

返回results:对象

OkPacket {        
  fieldCount: 0,
  affectedRows: 1,
  insertId: 0,
  serverStatus: 2,
  warningCount: 0,
  message: '',
  protocol41: true,
  changedRows: 0
}

三、留心留心

① 一般不删除,删除了用户再想恢复怎么办。所以一般增加一个status字段,来标识用户状态,达到“虚假删除”的目的
② 一定要写where子语句,特别是在更新和删除表时,不写默认对所有行进行操作,会造成严重的后果。

你可能感兴趣的:(从零开始Node.js,node.js,javascript,mysql)