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

相关推荐
那小孩儿7 分钟前
?? 、 || 、&&=、||=、??=这些运算符你用对了吗?
前端·javascript
菜鸟码农_Shi15 分钟前
Node.js 如何实现 GitHub 登录(OAuth 2.0)
javascript·node.js
没资格抱怨20 分钟前
如何在vue3项目中使用 AbortController取消axios请求
前端·javascript·vue.js
脑子慢且灵32 分钟前
MySQL:存储函数和存储过程
数据库·mysql·oracle·存储过程·存储函数
总之就是非常可爱1 小时前
🚀 使用 ReadableStream 优雅地处理 SSE(Server-Sent Events)
前端·javascript·后端
用户590527632131 小时前
极客时间mysql进阶训练营
mysql
2401_890665861 小时前
免费送源码:Java+ssm+MySQL 基于PHP在线考试系统的设计与实现 计算机毕业设计原创定制
java·hadoop·spring boot·python·mysql·spring cloud·php
ᖰ・◡・ᖳ1 小时前
Web APIs阶段
开发语言·前端·javascript·学习
是大强1 小时前
mongodb 远程访问
数据库·mongodb
双叶8361 小时前
(51单片机)LCD显示日期时间时钟(DS1302时钟模块教学)(LCD1602教程)
c语言·开发语言·数据库·单片机·嵌入式硬件·mongodb·51单片机