数据库(database)是用来组织、存储和管理数据的仓库。
当今世界是一个充满着数据的互联网世界,充斥着大量的数据。
数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。
为了方便管理互联网世界中的数据,就有了数据库管理系统的概念(简称:数据库)。用户可以对数据库中的数据进行新增、查询、更新、删除等操作。
市面上的数据库有很多种,最常见的数据库有如下几个:
其中,MySQL、Oracle、.SQL Server属于传统型数据库(又叫做:关系型数据库或SQL数据库),这三者的设计理念相同,用法比较类似。
而Mongodb属于新型数据库(又叫做:非关系型数据库或NoSQL数据库),它在一定程度上弥补了传统型数据库的缺陷。
数据的组织结构:指的就是数据以什么样的结构进行存储。
传统型数据库的数据组织结构,与Excel中数据的组织结构比较类似。因此,我们可以对比着Excel来了解和学习传统型数据库的数据组织结构。
每个Excel中,数据的组织结构分别为工作簿、工作表、数据行、列这4大部分组成。

在传统型数据库中,数据的组织结构分为**数据库(database)、数据表(table))、数据行(row)、字段((field)**这4大部分组成。

mysql模块是托管于npm上的第三方模块。它提供了在Node,js项目中连接和操作MySQL数据库的能力。
想要在项目中使用它,需要先运行如下命令,将mysql安装为项目的依赖包:
npm i mysql # 对于mysql5.x
npm i mysql2 # 对于mysql8.x
// 导入mysql模块
const mysql = require('mysql')
// 建立与 MySQL数据库的连接
const db = mysql.createPool({
host: '127.0.0.1',
user: 'root',
password: 'root',
database: 'nodejs-study' // 指定操作的数据库
})
调用db.query()函数,指定要执行的SQL语句,通过回调函数拿到执行的结果:
// 检测mysql模块能否正常工作
db.query('SELECT 1', (err, results) => {
if (err) return console.log(err.message)
// 如果能打印出来 [ { '1': 1 } ] 说明没有问题
console.log(results)
})
查询users表中的所有数据
db.query('SELECT * FROM users', (err, results) => {
if (err) return console.log(err.message)
// 打印结果
console.log(results)
})
如果执行的是 select 查询语句,则执行的结果是数组

插入新的用户信息
通过
affectedRows判断是否插入数据成功,如果是多行的话建议使用result.affectRows != 0
const userInfo = {
username: "sunliu",
age: 19,
gender: "男"
}
const sqlStr = 'INSERT INTO users VALUES (?, ?, ?)'
db.query(sqlStr, [userInfo.username, userInfo.age, userInfo.gender], (err, result) => {
if (err) return console.log(err.message)
// 插入数据成功
if (result.affectedRows === 1) {
console.log("插入数据成功")
}
})
向表中新增数据时,如果数据对象的每个属性和数据表的字段一一对应,则可以通过如下方式快速插入数据:
const userInfo = {
name: "sunliu",
age: 19,
gender: "男"
}
const sqlStr = 'INSERT INTO users SET ?'
db.query(sqlStr, userInfo, (err, result) => {
if (err) return console.log(err.message)
// 插入数据成功
if (result.affectedRows === 1) {
console.log("插入数据成功")
}
})
数据库表结构:

可以通过如下方式,更新表中的数据:
const userInfo = {
name: "sunliu",
age: 50,
gender: "男"
}
const sqlStr = 'UPDATE users SET age=? WHERE name=?'
db.query(sqlStr, [userInfo.age, userInfo.name], (err, result) => {
if (err) return console.log(err.message)
if (result.affectedRows === 1) {
console.log("修改数据成功")
}
})
更新表数据时,如果数据对象的每个属性和数据表的字段一一对应,则可以通过如下方式快速更新表数据:
const userInfo = {
name: "sunliu",
age: 50,
gender: "男"
}
const sqlStr = 'UPDATE users SET ? WHERE name=?'
db.query(sqlStr, [userInfo, userInfo.name], (err, result) => {
if (err) return console.log(err.message)
if (result.affectedRows === 1) {
console.log("修改数据成功")
}
})
在删除数据时,推荐根据d这样的唯一标识,来删除对应的数据。示例如下:
const sql = 'delete from users where id=?'
db.query(sql, id, (err, results) => {
if (err) return console.log(err.message)
if (result.affectedRows === 1) {
console.log("删除数据成功")
}
})
db.query('update users set status=1 where id=?', 7, (err, results) => {
if (err) return console.log(err.message)
if (result.affectedRows === 1) {
console.log("删除数据成功")
}
})