当前位置: 首页 > news >正文

Node.js 操作 MySQL 数据库

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

    node -v  # 确认版本 ≥14.x
    npm -v    # 确认能正常输出

  2. MySQL 服务检查

    
    # Linux
    systemctl status mysql# Windows (CMD)
    sc query MySQL


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

    
    CREATE DATABASE users CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    USE users;

  2. 关闭外键检查并建表

    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. 项目初始化

    
    npm init -y
    npm install mysql2

  2. 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(); // 测试后关闭
    });


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

    
    const connection = mysql.createConnection({ /* 配置同上 */ });connection.query('SELECT * FROM t_users', (err, results) => {if (err) throw err;console.log(results);connection.end();
    });

  2. 条件查询

    
    const sql = 'SELECT * FROM t_users WHERE name LIKE ? AND borndate < ?';
    const params = ['%郭%', '2003-12-31'];
    connection.query(sql, params, (err, results) => {// 处理结果
    });

  3. 获取字段信息

    
    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 中的占位符严格匹配。

  1. 连接管理

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

  1. 错误处理

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

  1. 数据类型

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

  1. 调试技巧

打印 results 和 fields 理解返回数据结构。

相关文章:

  • MySQL:存储函数和存储过程
  • 基于vue2+ElementUI的el-tree封装一个带搜索的树形组件
  • 【差分隐私相关概念】瑞丽差分隐私(RDP)-瑞丽散度约束了贝叶斯因子后验变化
  • 前端与Java后端交互出现跨域问题的14种解决方案
  • 使用 Node.js、Express 和 React 构建强大的 API
  • 4.15【A】pc homework3~
  • python实战案例:玩具销售数据分析
  • Java基础-泛型(泛型擦除)
  • 【redis】初识redis
  • 实验二.单按键控制LED
  • 自定义Jackson序列化和反序列化
  • 家用发电机的原理是什么?
  • 【STM32】在FreeRTOS下使用硬件SPI收发数据出现的时序耦合问题(WK2124芯片为例)
  • 使用 Sass 打造动态星空背景效果
  • 远方游子的归家记:模仿美食网页的制作与实现
  • React JSX?
  • C++红黑树
  • 时间的重构:科技如何重塑人类的时间感知与存在方式
  • 【大模型系列篇】深度研究智能体技术演进:从DeepResearch到DeepResearcher,如何重构AI研究范式
  • 深度访谈:数据中台的本质不是技术堆砌,而是业务引擎的重构
  • A股低开高走全线上涨:军工股再度领涨,两市成交12934亿元
  • 常州市委原常委、组织部部长陈翔调任江苏省民宗委副主任
  • 金融监管总局将出八大增量政策,李云泽详解稳楼市稳股市“组合拳”
  • 水中托举救出落水孩童后遇难,42岁退役军人高武被确认为见义勇为
  • 李云泽:房地产“白名单”贷款审批通过金额增至6.7万亿元
  • 一网红被指涉脱衣殴打霸凌事件,沈阳警方:刑拘1人,处罚5人