1. 数据库的基本概念
数据库是用来组织、存储和管理数据的仓库
1.1 常见的数据库及分类
市面上的数据库有很多种,最常见的数据库有如下几个:
- MySQL数据库(目前使用最广泛,流行度最高的开源免费数据库)
- Oracle数据库(收费)
- SQL Server数据库(收费)
- Mongodb数据库(免费Community版、收费Enterprise版)
其中,MySQL 、Oracle 、SQL Server 属于传统型数据库(又叫关系型 数据库) 而Mongodb 属于新型数据库(又叫非关系型 数据库)
1.2 传统型数据库的数据组织结构
传统型数据库中,数据的组织结构分为数据库 、数据表 、数据行 、字段
1.3 实际开发中库、表、行、字段的关系
- 在实际项目开发中,一般情况下,每个项目都对应独立的数据库
- 不同的数据,要存储到数据库的不同表中,例如:用户数据存储到user表中,图书数据存储到books表中
- 每个表中具体存储哪些信息,由字段来决定,例如:我们可以为user表设计id、username、password这三个字段
- 表中的行,代表每一条具体的数据
2. 安装并配置MySQL
对于开发人员,只需要安装 MySQL Server 和 MySQL Workbench 这两个软件,就能满足开发的需要了
MySQL Server :专门用来提供数据存储和服务的软件MySQL Workbench :可视化的 MySQL 管理工具,通过它可以方便地操作存储在 MySQL Server 中的数据
具体安装过程在这不记录了,教程也很多可以自己搜
3. MySQL的基本使用
3.1 使用MySQL Workbench管理数据库
- 连接数据库
- 创建数据库
- 创建数据表
DataType 数据类型:int 整数、varchar 字符串、tinyint(1) 布尔值 字段的特殊标识:
PK (Primary Key):主键、唯一标识 (这里的id就要勾上PK)NN (Not Null):值不允许为空UQ (Unique):值唯一AI (Auto Increment):值自动增长(一般id的值勾上AI,这样不用人为修改可以自动递增) - 向表中写入数据
3.2 使用SQL管理数据库
3.2.1 SQL是什么
SQL(Structured Query Language)是结构化查询语言,专门用来访问和处理数据库的编程语言 能够让我们以编程的形式,操作数据库里的数据
- SQL是一门数据库编程语言
- 使用SQL语言编写出来的代码,叫做SQL语句
- SQL语言只能在
关系型数据库 中使用(例如MySQL、Oracle、SQL Server),非关系型数据库(例如Mongodb)不支持SQL语言
3.2.2 SQL能做什么
- 从数据库中查询数据
- 向数据库中插入新的数据
- 更新数据库中的数据
- 从数据库删除数据
3.2.3 SQL的 SELECT 语句
语法: SELECT 语句用于从表中查询数据。执行的结果被存储在一个结果表中(称为结果集)。语法格式如下:
SELECT * FROM 表名
SELECT 字段名 FROM 表名
??:SQL语句中的关键字对大小写不敏感 例:在users表中,获取名为username 和password 的字段内容
SELECT username, password FROM users
3.2.4 SQL的 INSERT INTO 语句
语法: INSERT INTO 语句用于向数据表中插入新的数据行。语法格式如下:
INSERT INTO table_name (字段1,字段2...) VALUES(值1,值2...)
例:向users表中,插入一条username 为Tom ,password 为111111 的用户数据
INSERT INTO users (username, password) values ('Tom', '111111')
3.2.5 SQL的 UPDATE 语句
语法: Update 语句用于修改表中的数据。语法格式如下:
UPDATE 表名 SET 字段名 = 新值 WHERE 字段名 = 某值
例:将users表中id为1的用户密码,更新为888888
UPDATE users SET password='888888' WHERE id=1
例:将users表中id为2的用户密码更新为888888 ,用户状态更新为1
UPDATE users SET password='888888', status=1 WHERE id=2
3.2.6 SQL的 DELETE 语句
语法: DELETE 语句用于删除表中的行。语法格式如下:
DELETE FROM 表名 WHERE 字段名 = 某值
例:从users表中删除id为3的用户
DELETE FROM users WHERE id=3
3.2.7 SQL的 WHERE 子句
语法: WHERE 子句用于限定选择的标准
SELECT * FROM users WHERE id>2
SELECT * FROM users WHERE username<>'admin'
3.2.8 SQL的AND和OR运算符
AND 和OR 可以在WHERE 子语句中把两个或多个条件结合起来 AND 相当于js中的&& 运算符 OR 相当于js中的|| 运算符
SELECT * FROM users WHERE status=0 AND id<3
SELECT * FROM users WHERE status=1 OR username='AIpoem'
3.2.9 SQL的ORDER BY 子句
语法: ORDER BY 语句用于根据指定的字段 对结果集 进行排序 默认按照升序 对记录进行排序(使用ASC 关键字也能达到升序效果) 如果希望按照降序 ,可使用DESC 关键字
SELECT * FROM users ORDER BY id;
SELECT * FROM users ORDER BY id DESC;
多重排序:
SELECT * FROM users ORDER BY status DESC, username ASC
3.2.10 SQL的 COUNT(*) 子句
语法: COUNT(*) 函数用于返回查询结果的总数据条数
SELECT COUNT(*) FROM users WHERE status=0
SELECT COUNT(*) AS total FROM users WHERE status=0
4. 在项目中操作MySQL
4.1 在项目中操作数据库的步骤
- 安装操作MySQL数据库的第三方模块(mysql)
- 通过mysql模块连接到MySQL数据库
- 通过mysql模块执行SQL语句
4.2 安装与配置mysql模块
4.2.1 安装mysql模块
mysql模块是托管于npm上的第三方模块 。它提供了在Node.js项目中连接 和操作 MySQL数据库的能力 要在项目中使用它,需要先将mysql安装为项目的依赖包
npm install mysql
4.2.2 配置mysql模块
配置步骤:
const mysql = require('mysql')
const db = mysql.createPool({
host: '127.0.0.1',
user: 'root',
password: '123456',
database: 'my_db_01'
})
4.2.3 测试mysql模块能否正常工作
调用db.query() 函数,指定要执行的SQL语句,通过回调函数拿到执行的结果:
db.query('SELECT 1', (err,results) => {
if (err) return console.log(err.message)
console.log(results)
})
4.3 使用mysql模块操作MySQL数据库
4.3.1 查询数据
db.query('SELECT * FROM users', (err,results) => {
if (err) return console.log(err.message)
console.log(results)
})
4.3.2 插入数据
向users表中新增数据,其中username为Tom,password为123456
const userObj = { username: 'Tom', password: '123456'}
const sqlStr = 'INSERT INTO users (username, password) VALUES (?,?)'
db.query(sqlStr, [userObj.username,userObj.password],(err,results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('插入数据成功!')
}
})
插入数据的便捷方式: 要注意数据表的字段名和数据对象的属性名一一对应
const userObj = { username: 'Tom', password: '123456'}
const sqlStr = 'INSERT INTO users SET ?'
db.query(sqlStr, userObj, (err,results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('插入数据成功!')
}
})
4.3.3 更新数据
const upUserObj = {id: 1, username: 'Pat', password: '000000'}
const sqlStr = 'UPDATE users SET username=?, password=? WHERE id=?'
db.query(sqlStr, [upUserObj.username,upUserObj.password,upUserObj.id], (err,results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('更新数据成功!');
}
})
更新数据的便捷方式:
const upUserObj = {id: 1, username: 'Pat', password: '000000'}
const sqlStr = 'UPDATE users SET ? WHERE id=?'
db.query(sqlStr, [upUserObj,upUserObj.id], (err,results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('更新数据成功!');
}
})
4.3.4 删除数据
在删除数据时,推荐根据id这样的唯一标识来删除对应的数据
const sqlStr = 'DELETE FROM users WHERE id=?'
db.query(sqlStr, 1, (err,results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('删除数据成功!');
}
})
??:如果sql语句中有多个 占位符,则必须使用数组 来为每个占位符制定具体的值 如果sql语句中只有一个 占位符,则可以省略数组
4.3.5 标记删除
使用DELETE 语句,会把数据从表中真正地删除。 为了保险起见,更推荐使用标记删除 的形式,来模拟删除的动作
所谓标记删除 ,就是在表中设置类似于status 这样的状态字段,来标记当前这条数据是否被删除 当用户执行了删除的动作时,我们并没有执行DELETE 语句把数据删除掉,而是执行了UPDATE 语句将这条数据的status 字段标记为删除
db.query('UPDATE users SET status=1 WHERE id=?',1,(err,results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('删除数据成功!');
}
})
完 新年偷了几天懒没学习嘿嘿
|