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 理解返回数据结构。

相关推荐
技术小丁5 分钟前
使用 HTML + JavaScript 实现酒店订房日期选择器(附完整源码)
前端·javascript
hashiqimiya6 分钟前
harmonyos的鸿蒙的跳转页面的部署
开发语言·前端·javascript
万事大吉CC13 分钟前
SQL语法基础教程
数据库·oracle
闭着眼睛学算法24 分钟前
【双机位A卷】华为OD笔试之【排序】双机位A-银行插队【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·javascript·c++·python·算法·华为od
Drift_Dream29 分钟前
深入浅出 requestAnimationFrame:让动画更流畅的利器
javascript
betazhou30 分钟前
Oracle dgbroker常规命令管理简介
数据库·oracle·adg·dbbroker
GIS瞧葩菜33 分钟前
【无标题】
开发语言·前端·javascript·cesium
彭于晏爱编程41 分钟前
关于表单,别做工具库舔狗
前端·javascript·面试
拉不动的猪44 分钟前
什么是二义性,实际项目中又有哪些应用
前端·javascript·面试
烟袅1 小时前
LeetCode 142:环形链表 II —— 快慢指针定位环的起点(JavaScript)
前端·javascript·算法