Linux 下安装 MongoDB/MySQL/SQLite 并通过 Node.js ORM 实现增删查改
你需要在 Linux 系统中安装 MongoDB、MySQL、SQLite,并使用 JavaScript(Node.js 生态) 的主流 ORM 框架实现三大数据库的连接与增删查改(CRUD)。本文以 Ubuntu 22.04 为例(附 CentOS 适配),选择 JS 生态最成熟的 ORM:
- MySQL/SQLite(关系型数据库):使用
Sequelize(Node.js 最主流的通用关系型 ORM);
- MongoDB(文档型数据库):使用
Mongoose(MongoDB 专属 ODM/ORM,JS 生态事实标准)。
一、环境准备:Linux 安装三大数据库
1. 系统基础配置(通用步骤)
1 2 3 4 5
| sudo apt update && sudo apt upgrade -y
|
2. 安装 MySQL(8.0 版本)
步骤 1:安装服务
1 2 3 4 5
| sudo apt install mysql-server -y
|
步骤 2:初始化配置(设置密码/创建测试库)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| sudo mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyPass123!'; FLUSH PRIVILEGES;
CREATE DATABASE test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
exit;
sudo systemctl start mysql sudo systemctl enable mysql
mysql -u root -p
|
3. 安装 MongoDB(6.0 社区版)
步骤 1:配置官方源(Ubuntu)
1 2 3 4 5 6 7 8
| curl -fsSL https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update
|
步骤 2:安装并启动
1 2 3 4 5 6
| sudo apt install mongodb-org -y sudo systemctl start mongod sudo systemctl enable mongod
sudo systemctl status mongod
|
步骤 3:开启认证(可选)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| mongosh
use admin db.createUser({ user: "root", pwd: "MyPass123!", roles: [{ role: "root", db: "admin" }] });
use test_mongo_db;
exit; sudo vim /etc/mongod.conf
security: authorization: enabled
sudo systemctl restart mongod
|
4. 安装 SQLite(Linux 自带,验证即可)
SQLite 是嵌入式数据库,无需服务,Ubuntu/CentOS 均预装:
1 2 3 4 5 6
| sqlite3 --version
sqlite3 test_sqlite.db "CREATE TABLE test (id INT);" ls -l test_sqlite.db
|
5. 安装 Node.js(JS 运行环境)
1 2 3 4 5 6 7
| curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt install nodejs -y
node -v npm -v
|
二、安装 JS ORM 依赖
创建项目目录并安装核心依赖:
1 2 3 4 5 6 7 8
| mkdir js-orm-demo && cd js-orm-demo
npm init -y
npm install sequelize mongoose mysql2 sqlite3 dotenv --save
|
sequelize:MySQL/SQLite 的 ORM 核心;
mongoose:MongoDB 的 ORM/ODM 框架;
mysql2:MySQL 驱动(Sequelize 推荐);
sqlite3:SQLite 驱动;
dotenv:管理环境变量(避免硬编码密码)。
三、ORM 实现 CRUD 操作(JavaScript)
1. 配置文件(.env)
在项目根目录创建 .env,存放数据库连接信息:
1 2 3 4 5 6 7 8 9
| MYSQL_URI=mysql://root:MyPass123!@localhost:3306/test_db
SQLITE_URI=sqlite://./test_sqlite.db
MONGO_URI=mongodb://root:MyPass123!@localhost:27017/test_mongo_db
|
2. MySQL 操作(Sequelize)
创建 mysql-crud.js,实现完整 CRUD:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| require('dotenv').config(); const { Sequelize, DataTypes, Model } = require('sequelize');
const sequelize = new Sequelize(process.env.MYSQL_URI);
class User extends Model {} User.init({ name: { type: DataTypes.STRING(50), allowNull: false }, age: { type: DataTypes.INTEGER, validate: { min: 0 } } }, { sequelize, tableName: 'users', timestamps: true });
async function crudDemo() { try { await sequelize.authenticate(); console.log('MySQL 连接成功!');
await User.sync({ force: false });
const newUser = await User.create({ name: '张三', age: 25 }); console.log('新增用户:', { id: newUser.id, name: newUser.name });
const user = await User.findByPk(newUser.id); console.log('查询用户:', { name: user.name, age: user.age });
const users = await User.findAll({ where: { age: { [Sequelize.Op.gte]: 20 } } }); console.log('20岁以上用户:', users.map(u => u.name));
await user.update({ age: 26 }); console.log('更新后年龄:', user.age);
await user.destroy(); console.log('删除用户成功!');
} catch (error) { console.error('操作失败:', error.message); } finally { await sequelize.close(); } }
crudDemo();
|
3. SQLite 操作(Sequelize)
SQLite 与 MySQL 仅连接 URI 不同,Sequelize 语法完全通用。创建 sqlite-crud.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| require('dotenv').config(); const { Sequelize, DataTypes, Model } = require('sequelize');
const sequelize = new Sequelize(process.env.SQLITE_URI);
class Product extends Model {} Product.init({ name: { type: DataTypes.STRING(100), allowNull: false }, price: { type: DataTypes.INTEGER, allowNull: false } }, { sequelize, tableName: 'products', timestamps: true });
async function crudDemo() { try { await sequelize.authenticate(); console.log('SQLite 连接成功!'); await Product.sync({ force: false });
const newProduct = await Product.create({ name: '手机', price: 2999 }); console.log('新增商品:', { id: newProduct.id, name: newProduct.name });
const product = await Product.findByPk(newProduct.id); console.log('查询商品:', { name: product.name, price: product.price });
await product.update({ price: 2899 }); console.log('更新后价格:', product.price);
await product.destroy(); console.log('删除商品成功!');
} catch (error) { console.error('操作失败:', error.message); } finally { await sequelize.close(); } }
crudDemo();
|
4. MongoDB 操作(Mongoose)
MongoDB 是文档型数据库,无“表”概念,用“集合(Collection)”替代。创建 mongodb-crud.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| require('dotenv').config(); const mongoose = require('mongoose');
mongoose.connect(process.env.MONGO_URI) .then(() => console.log('MongoDB 连接成功!')) .catch(err => console.error('MongoDB 连接失败:', err));
const studentSchema = new mongoose.Schema({ name: { type: String, required: true, maxlength: 50 }, age: { type: Number, required: true, min: 0 }, grade: { type: String, maxlength: 20 } }, { timestamps: true });
const Student = mongoose.model('Student', studentSchema, 'students');
async function crudDemo() { try { const student = new Student({ name: '李四', age: 18, grade: '高一' }); await student.save(); console.log('新增学生:', { id: student._id, name: student.name });
const s = await Student.findById(student._id); console.log('查询学生:', { name: s.name, grade: s.grade });
const students = await Student.find({ age: { $gte: 18 } }); console.log('18岁以上学生:', students.map(stu => stu.name));
await Student.findByIdAndUpdate(student._id, { age: 19 }); const updatedStu = await Student.findById(student._id); console.log('更新后年龄:', updatedStu.age);
await Student.findByIdAndDelete(student._id); console.log('删除学生成功!');
} catch (error) { console.error('操作失败:', error.message); } finally { await mongoose.disconnect(); } }
crudDemo();
|
5. 运行测试
1 2 3 4 5 6 7 8
| node mysql-crud.js
node sqlite-crud.js
node mongodb-crud.js
|
运行后控制台会输出操作日志,可通过数据库控制台验证数据变化:
- MySQL:
mysql -u root -p test_db -e "SELECT * FROM users;"
- SQLite:
sqlite3 test_sqlite.db "SELECT * FROM products;"
- MongoDB:
mongosh test_mongo_db --eval "db.students.find()"
四、核心总结
1. JS ORM 选型关键点
| 框架 |
适配数据库 |
核心概念 |
优势 |
| Sequelize |
MySQL/SQLite |
Model=表,Schema=字段 |
跨关系型数据库兼容,支持事务、关联查询 |
| Mongoose |
MongoDB |
Schema=文档结构,Model=集合 |
适配 MongoDB 文档特性,验证/中间件丰富 |
2. 通用 CRUD 逻辑(JS 版)
- 初始化连接:通过 URI 建立数据库连接(Sequelize/Mongoose 均支持);
- 定义模型:
- 关系型(MySQL/SQLite):Model 映射表,字段定义含类型/校验;
- 文档型(MongoDB):Schema 定义文档结构,Model 关联集合;
- 操作数据:
- 新增:
create()(Sequelize)/ new Model().save()(Mongoose);
- 查询:
findByPk()/findAll()(Sequelize)/ findById()/find()(Mongoose);
- 更新:
update()(Sequelize)/ findByIdAndUpdate()(Mongoose);
- 删除:
destroy()(Sequelize)/ findByIdAndDelete()(Mongoose);
- 异常处理:用
try/catch 捕获错误,确保连接最终关闭。
3. 部署注意事项
- 生产环境需关闭 Sequelize/Mongoose 的调试日志,避免性能损耗;
- MySQL/MongoDB 需配置连接池(Sequelize/Mongoose 均支持),提升并发性能;
- SQLite 仅适用于轻量场景(无并发/低数据量),生产环境优先选 MySQL/MongoDB。
通过这套方案,你可在 Linux 下快速部署三大数据库,并使用 JavaScript 生态的主流 ORM 框架实现统一风格的增删查改,屏蔽底层数据库语法差异,提升前端/全栈开发效率。