环境检查
-
Node.js 环境验证
bashnode -v # 确认版本 ≥14.x npm -v # 确认能正常输出
-
MySQL 服务检查
bash# Linux systemctl status mysql # Windows (CMD) sc query MySQL
数据库与表创建
-
创建数据库
sqlCREATE DATABASE users CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE users;
-
关闭外键检查并建表
sqlSET 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 连接数据库
-
项目初始化
bashnpm init -y npm install mysql2
-
index.js 基础连接
javascriptconst 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 简单查询
javascriptconst connection = mysql.createConnection({ /* 配置同上 */ }); connection.query('SELECT * FROM t_users', (err, results) => { if (err) throw err; console.log(results); connection.end(); });
-
条件查询
javascriptconst sql = 'SELECT * FROM t_users WHERE name LIKE ? AND borndate < ?'; const params = ['%郭%', '2003-12-31']; connection.query(sql, params, (err, results) => { // 处理结果 });
-
获取字段信息
javascriptconnection.query('SELECT * FROM t_users WHERE id > ?', [5], (err, results, fields) => { console.log(fields.map(f => f.name)); // 输出字段名 } );
新增操作 (insert.js)新增作 (insert.js)
javascript
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)
javascript
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
理解返回数据结构。