环境检查
-
Node.js 环境验证
node -v # 确认版本 ≥14.x npm -v # 确认能正常输出
-
MySQL 服务检查
# Linux systemctl status mysql# Windows (CMD) sc query MySQL
数据库与表创建
-
创建数据库
CREATE DATABASE users CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE users;
-
关闭外键检查并建表
SET FOREIGN_KEY_CHECKS = 0;CREATE TABLE t_users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,gender TINYINT(1),borndate DATE,address VARCHAR(255) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;-- 插入测试数据 INSERT INTO t_users (name, gender, borndate, address) VALUES ('郭靖', 1, '2000-01-01', '襄阳'), ('黄蓉', 0, '2001-05-05', '桃花岛');SET FOREIGN_KEY_CHECKS = 1;
Node.js 连接数据库
-
项目初始化
npm init -y npm install mysql2
-
index.js 基础连接
const mysql = require('mysql2');const connection = mysql.createConnection({host: 'localhost',user: 'root',password: 'your_password',database: 'users' });connection.connect((err) => {if (err) throw err;console.log('MySQL connected!');connection.end(); // 测试后关闭 });
查询操作
-
query.js 简单查询
const connection = mysql.createConnection({ /* 配置同上 */ });connection.query('SELECT * FROM t_users', (err, results) => {if (err) throw err;console.log(results);connection.end(); });
-
条件查询
const sql = 'SELECT * FROM t_users WHERE name LIKE ? AND borndate < ?'; const params = ['%郭%', '2003-12-31']; connection.query(sql, params, (err, results) => {// 处理结果 });
-
获取字段信息
connection.query('SELECT * FROM t_users WHERE id > ?', [5], (err, results, fields) => {console.log(fields.map(f => f.name)); // 输出字段名} );
新增操作 (insert.js)新增作 (insert.js)
const sql = `INSERT INTO t_users (name, gender, borndate, address) VALUES (?, ?, ?, ?)`;
const params = ['梅超风', 1, '2004-07-09', '古墓'];connection.query(sql, params, (err, result) => {console.log('Insert ID:', result.insertId);connection.end();
});
修改操作 (update.js)修改作 (update.js)
const sql = 'UPDATE t_users SET name=?, address=? WHERE id=?';
const params = ['张三丰', '武当山', 3];connection.query(sql, params, (err, result) => {console.log('Affected rows:', result.affectedRows);connection.end();
});
关键点总结
安全实践
- 使用
?
占位符防止 SQL 注入。 -
参数数组顺序需与 SQL 中的占位符严格匹配。
-
连接管理
每次操作后调用 connection.end()
释放资源。
-
错误处理
回调函数中优先检查 err
对象。
-
数据类型
确保 JS 中的数据类型与 MySQL 字段匹配(如日期格式为 YYYY-MM-DD
)。
-
调试技巧
打印 results
和 fields
理解返回数据结构。