Node.js - MySQL 从表中选择数据
对 MySQL 数据库执行的最常见操作是从表中检索数据。SELECT 查询对应于 CRUD 缩写中的 Retrieve(检索)操作。要使用 Node.js 程序执行检索操作,应将 SELECT 查询字符串传递给 MySQL connection 对象的 query() 方法。
MySQL 中的 SELECT FROM 语句具有以下语法 −
SELECT field1, field2, ... FROM table_name;
要从表中选择所有定义的字段的数据,可以使用星号 (*) 字符。
SELECT * FROM table_name;
主要 SELECT 语句还可以与 LIKE、WHERE、ORDER BY 等附加子句一起使用。
SELECT 语句返回一个 resultset,包含从表中检索到的行列表。
MySQL 命令行客户端类似于 Node.js 的 REPL 环境。由 SELECT 语句检索到的 resultset 会立即在查询语句之后显示。
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 connection 对象的 query() 方法时,它返回一个 RowDataPacket 对象的数组。要处理检索到的数据,必须将其 JSON 化。
示例
在以下代码中,我们将 SELECT 查询字符串传递给 con.query() 方法,并在控制台上显示 resultset。
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 对象转换为字符串,而不是使用原始 resultset。
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}]