Node.js 与 MySQL 连接:初学者指南

你好,有抱负的程序员们!今天,我们将踏上一段激动人心的旅程,探索 Node.js 和 MySQL 连接的世界。如果你是编程新手,不用担心——我会成为你的友好向导,一步步解释所有内容。在本教程结束时,你将能够像专业人士一样连接表!

Node.js - MySQL Join

理解基础知识

在我们深入连接之前,让我们先了解一些基本概念。想象你正在组织一个学校俱乐部集市。你有两个列表:一个是学生列表,另一个是俱乐部列表。连接这些列表将帮助你看到哪些学生在哪些俱乐部。这基本上就是我们将在数据库中做的事情!

配置我们的环境

首先,让我们确保我们有所需的一切:

  1. 从官方网站安装 Node.js。
  2. 安装 MySQL 并设置数据库。
  3. 通过运行以下命令安装 Node.js 的 MySQL 模块:
npm install mysql

现在,让我们创建一个到我们数据库的连接:

const mysql = require('mysql');

const connection = mysql.createConnection({
host: 'localhost',
user: 'your_username',
password: 'your_password',
database: 'school_club_fair'
});

connection.connect((err) => {
if (err) throw err;
console.log('已连接到数据库!');
});

这段代码设置了我们的数据库连接。将 'your_username' 和 'your_password' 替换为你的实际 MySQL 凭据。

成员表

让我们创建我们的第一个表:成员表。这将代表我们的学生。

CREATE TABLE Members (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);

INSERT INTO Members (name, email) VALUES
('Alice', '[email protected]'),
('Bob', '[email protected]'),
('Charlie', '[email protected]');

在 Node.js 中创建这个表:

connection.query(`
CREATE TABLE Members (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
)
`, (err) => {
if (err) throw err;
console.log('成员表已创建!');
});

const members = [
['Alice', '[email protected]'],
['Bob', '[email protected]'],
['Charlie', '[email protected]']
];

connection.query('INSERT INTO Members (name, email) VALUES ?', [members], (err) => {
if (err) throw err;
console.log('成员已添加!');
});

委员会表

现在,让我们创建我们的委员会表,代表俱乐部:

CREATE TABLE Committees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
member_id INT,
FOREIGN KEY (member_id) REFERENCES Members(id)
);

INSERT INTO Committees (name, member_id) VALUES
('Chess Club', 1),
('Debate Team', 2),
('Drama Club', 3),
('Chess Club', 2);

在 Node.js 中:

connection.query(`
CREATE TABLE Committees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
member_id INT,
FOREIGN KEY (member_id) REFERENCES Members(id)
)
`, (err) => {
if (err) throw err;
console.log('委员会表已创建!');
});

const committees = [
['Chess Club', 1],
['Debate Team', 2],
['Drama Club', 3],
['Chess Club', 2]
];

connection.query('INSERT INTO Committees (name, member_id) VALUES ?', [committees], (err) => {
if (err) throw err;
console.log('委员会已添加!');
});

现在我们已经设置好了表,让我们探索不同类型的连接!

MySQL INNER JOIN

INNER JOIN 返回两个表中有匹配值的记录。就像找到确实在俱乐部中的学生。

connection.query(`
SELECT Members.name, Committees.name AS committee
FROM Members
INNER JOIN Committees ON Members.id = Committees.member_id
`, (err, results) => {
if (err) throw err;
console.table(results);
});

这个查询将向我们展示所有成员和他们所在的委员会。如果一个成员不在任何委员会中,他们不会出现在结果中。

MySQL LEFT JOIN

LEFT JOIN 返回左表(成员)的所有记录,以及右表(委员会)的匹配记录。就像列出所有学生,如果他们在某个俱乐部中,就显示他们的俱乐部。

connection.query(`
SELECT Members.name, Committees.name AS committee
FROM Members
LEFT JOIN Committees ON Members.id = Committees.member_id
`, (err, results) => {
if (err) throw err;
console.table(results);
});

这将显示所有成员,即使他们不在任何委员会中(他们的委员会将是 NULL)。

MySQL RIGHT JOIN

RIGHT JOIN 返回右表(委员会)的所有记录,以及左表(成员)的匹配记录。就像列出所有俱乐部,如果有的话,就显示成员。

connection.query(`
SELECT Members.name, Committees.name AS committee
FROM Members
RIGHT JOIN Committees ON Members.id = Committees.member_id
`, (err, results) => {
if (err) throw err;
console.table(results);
});

这将显示所有委员会,即使它们没有成员(成员名称将是 NULL)。

连接类型比较

下面是一个方便的表格,总结了不同类型的连接:

连接类型 描述 用例
INNER JOIN 返回两个表中的匹配记录 当你需要存在于两个表中的数据时
LEFT JOIN 返回左表的所有记录,右表的匹配记录 当你需要第一个表的所有记录,不管是否有匹配时
RIGHT JOIN 返回右表的所有记录,左表的匹配记录 当你需要第二个表的所有记录,不管是否有匹配时

结论

恭喜你!你刚刚学习了在 Node.js 中使用 MySQL 连接。记住,连接就像侦探工作——你正在从不同的来源连接信息,以获得完整的画面。在不同的场景中练习,很快你将成为数据库关系的专家!

继续编码,保持好奇心,别忘了在过程中享受乐趣。愉快的连接!

Credits: Image by storyset