• Node.js Video Tutorials

Node.js - MySQL 从表中选择数据



在 MySQL 数据库中最常见的操作是从表中检索数据。SELECT 查询对应于 CRUD 首字母缩写词中的检索操作。要使用 Node.js 程序执行检索,应将 SELECT 查询字符串传递给 MySQL 连接对象的 query() 方法。

MySQL 中的 SELECT FROM 语句具有以下语法:

SELECT field1, field2, ... FROM table_name;

要从表中定义的所有字段中选择数据,可以使用星号 (*) 字符。

SELECT * FROM table_name;

可以使用其他子句与主 SELECT 语句一起使用,例如 LIKE、WHERE、ORDER BY 等。

SELECT 语句返回一个结果集,其中包含从表中检索的行列表。

MySQL 命令行客户端类似于 Node.js REPL 环境。SELECT 语句检索的结果集在查询语句之后立即显示。

mysql> use mydb;
Database changed
mysql> SELECT name, age, salary FROM employee;
+-------+------+--------+
| name  | age  | salary |
+-------+------+--------+
| Ravi  |   25 |  25000 |
| Anil  |   26 |  30000 |
| Meena |   26 |  27000 |
+-------+------+--------+

但是,在 Node.js 中,当将 SELECT 查询传递给 MySQL 连接对象的 query() 方法时,它会返回一个 RowDataPacket 对象数组。要处理检索到的数据,必须将其转换为 JSON 格式。

示例

在以下代码中,我们将 SELECT 查询字符串传递给 con.query() 方法,并在控制台上显示结果集。

var mysql = require('mysql');
var con = mysql.createConnection({
   host: "localhost",
   user: "root",
   password: "mypassword",
   database: "mydb"
});

var qry =`SELECT name,salary FROM employee;`;
con.connect(function (err) {
   if (err) throw err;
   console.log("Connected!");
   con.query(qry, function (err, results) {
      if (err) throw err;
      console.log(results);
   });
   con.end();
});

输出

[
  RowDataPacket { name: 'Ravi', salary: 25000 },
  RowDataPacket { name: 'Anil', salary: 30000 },
  RowDataPacket { name: 'Meena', salary: 27000 }
]

我们可以使用 JSON.stringify() 方法将 RowDataPacket 对象转换为字符串,而不是原始结果集。

var qry =`SELECT name,salary FROM employee;`;
con.connect(function (err) {
   if (err) throw err;
   console.log("Connected!");
   con.query(qry, function (err, results) {
      if (err) throw err;
      console.log(JSON.stringify(results));
   });
   con.end();
});

输出

[{"name":"Ravi","salary":25000},{"name":"Anil","salary":30000},{"name":"Meena","salary":27000}]

示例

在此示例中,* 通配符用于从 employee 表中的所有字段检索数据。我们还使用 forEach 循环逐行迭代 SELECT 查询返回的结果集。每一行中每个字段的值可以通过在方括号中放入字段名称来获取。例如,行的 ID 由 row[‘id’] 给出。

var mysql = require('mysql');
var con = mysql.createConnection({
   host: "localhost",
   user: "root",
   password: "mypassword",
   database: "mydb"
});

var qry =`SELECT * FROM employee;`;
con.connect(function (err) {
   if (err) throw err;
   console.log("Connected!");
   con.query(qry, function (err, results) {
      if (err) throw err;
      results.forEach((row) => {
         console.log(`ID: ${row['id']}, NAME: ${row['name']}, AGE: ${row['age']}, SALARY: ${row['salary']}`);
      });
   });
   con.end();
});

输出

ID: 1, NAME: Ravi, AGE: 25, SALARY: 25000
ID: 2, NAME: Anil, AGE: 26, SALARY: 30000
ID: 3, NAME: Meena, AGE: 26, SALARY: 27000

您可以在 SELECT 语句的字段列表中包含派生或计算列,其中其值取决于涉及结构中定义的字段的表达式。您还可以使用 AS 关键字为字段指定别名。

SELECT expression AS COLUMN_name FROM table_name;

在以下示例中,SELECT 语句有一个 TAX 列。它的值计算为 salary 字段的 5%。

var mysql = require('mysql');
var con = mysql.createConnection({
   host: "localhost",
   user: "root",
   password: "mypassword",
   database: "mydb"
});

var qry =`SELECT name, salary, salary*0.05 as tax FROM employee;`;
con.connect(function (err) {
   if (err) throw err;
   console.log("Connected!");
   con.query(qry, function (err, results) {
      if (err) throw err;
      console.log(JSON.stringify(results));
   });
   con.end();
});

输出

[{"name":"Ravi","salary":25000,"tax":1250},{"name":"Anil","salary":30000,"tax":1500},{"name":"Meena","salary":27000,"tax":1350}]
广告