Node.js 操作 MySQL 数据库

环境检查
  1. Node.js 环境验证

    bash 复制代码
    node -v  # 确认版本 ≥14.x
    npm -v    # 确认能正常输出
  2. MySQL 服务检查

    bash 复制代码
    # Linux
    systemctl status mysql
    
    # Windows (CMD)
    sc query MySQL

数据库与表创建
  1. 创建数据库

    sql 复制代码
    CREATE DATABASE users 
      CHARACTER SET utf8mb4 
      COLLATE utf8mb4_unicode_ci;
    USE users;
  2. 关闭外键检查并建表

    sql 复制代码
    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 连接数据库
  1. 项目初始化

    bash 复制代码
    npm init -y
    npm install mysql2
  2. index.js 基础连接

    javascript 复制代码
    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(); // 测试后关闭
    });

查询操作
  1. query.js 简单查询

    javascript 复制代码
    const connection = mysql.createConnection({ /* 配置同上 */ });
    
    connection.query('SELECT * FROM t_users', (err, results) => {
      if (err) throw err;
      console.log(results);
      connection.end();
    });
  2. 条件查询

    javascript 复制代码
    const sql = 'SELECT * FROM t_users WHERE name LIKE ? AND borndate < ?';
    const params = ['%郭%', '2003-12-31'];
    connection.query(sql, params, (err, results) => {
      // 处理结果
    });
  3. 获取字段信息

    javascript 复制代码
    connection.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 中的占位符严格匹配。
  1. 连接管理

每次操作后调用 connection.end() 释放资源。

  1. 错误处理

回调函数中优先检查 err 对象。

  1. 数据类型

确保 JS 中的数据类型与 MySQL 字段匹配(如日期格式为 YYYY-MM-DD)。

  1. 调试技巧

打印 resultsfields 理解返回数据结构。

相关推荐
qq_1927798717 小时前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
东东51617 小时前
智能社区管理系统的设计与实现ssm+vue
前端·javascript·vue.js·毕业设计·毕设
u01092727117 小时前
使用Plotly创建交互式图表
jvm·数据库·python
爱学习的阿磊17 小时前
Python GUI开发:Tkinter入门教程
jvm·数据库·python
catino17 小时前
图片、文件的预览
前端·javascript
tudficdew18 小时前
实战:用Python分析某电商销售数据
jvm·数据库·python
Fleshy数模18 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
sjjhd65219 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
Configure-Handler19 小时前
buildroot System configuration
java·服务器·数据库
2501_9209317019 小时前
React Native鸿蒙跨平台实现推箱子游戏,完成玩家移动与箱子推动,当所有箱子都被推到目标位置时,玩家获胜
javascript·react native·react.js·游戏·ecmascript·harmonyos