数据库的基本概念
常见数据库:
市面上的数据库有很多种,最常见的数据库有如下几个:
- MySQL数据库(目前使用最广泛、流行度最高的开源免费数据库;Community + Enterprise)
- Oracle数据库(收费)
- SQL Server数据库(收费)
- Mongodb数据库(Community + Enterprise)
其中,MySQL、Oracle、SQL Server属于传统型数据库(又叫做:关系型数据库或SQL数据
库),这三者的设计理念相同,用法比较类似。
而Mongodb属于新型数据库(又叫做:非关系型数据库或NoSQL数据库),它在一定程度上弥补了传统型数据库的缺陷。
传统型数据库的数据组织结构
在传统型数据库中,数据的组织结构分为数据库(database)、数据表(table)、数据行(row)、字段(field)这4大部分组成。
实际开发中库、表、行、字段的关系
- 在实际项目开发中,一般情况下,每个项目都对应独立的数据库。
- 不同的数据,要存储到数据库的不同表中,例如:用户数据存储到users 表中,图书数据存储到books表中。
- 每个表中具体存储哪些信息,由字段来决定,例如:我们可以为users 表设计id、username、password这3个字段。
- 表中的行,代表每一条具体的数据。
使用MySQLWorkbench管理数据库
使用SQL管理数据库
SQL(英文全称: Structured Query Language)是结构化查询语言,专门用来访问和处理数据库的编程语言。能够让我们以编程的形式,操作数据库里面的数据。
关键点:
- SQL是一门数据库编程语言
- 使用SQL语言编写出来的代码,叫做SQL语句
- SQL语言只能在关系型数据库中使用(例如MySQL、Oracle、SQL Server)。非关系型数据库(例如Mongodb)不支持SQL语言
查select:
select * from users
select id,password from users
-- 两个查询语句不可同时使用
增insert:
insert into users (username,password) values ('pig','123456')
改update:
update users set password='666666' where id='1'
update users set password='666666',status='1' where id='1'
删delete:
delete from users where id='1'
-- 一定要加where,否则会删除整张表的数据
排序order by:
select * from users order by status
-- 默认升序排序 也可用asc关键字
select * from users order by status desc
-- desc关键字代表降序排序
多重排序:
select * from users order by status desc,username asc
统计数据count(*)
select count(*) from users where status='0'
设置别名as:
select count(*) as total from users where status='0'
-- 为查询的列起一个别名
在项目中操作MySQL
安装并配置mysql模块
首先将mysql安装为项目的依赖包
npm install mysql
创建mysql模块
//导入mysql模块
const mysql=require('mysql')
//建立MySQL数据库的连接关系
const db=mysql.createPool({
host:'127.0.0.1',
user:'root',
password:'admin123',
database:'my_db_01',
})
//测试mysql模块能否正常工作
db.query('select 1',(err,results)=>{
///mysql模块工作期间报错了
if (err) return console.log(err.message)
///能够成功执行SQL语句
console.log(results)
})
MySQL模块中的增删改查
查询数据
//查询users表中所有的数据
const sqlstr='select * from users'
db.query(sqlstr,(err,results)=>{
//查询数据失败
if(err) return console.log(err.message)
//查询数据成功
//如果执行的是select查询语句,执行成功返回对的结果是数组
console.log(results)
})
插入数据
//向users表中新增一条数据
const users={username:'spider-man',password:'273891'}
//定义待执行的SQL语句 其中?表示占位符
const sqlstr='insert into users (username,password) values (?,?)'
//执行SQL语句
db.query(sqlstr,[users.username,users.password],(err,results)=>{
//执行SQL语句失败了
if(err) return console.log(err.message)
//成功了
//如果执行的是insert into 插入语句,则results是一个对象
if(results.affectedRows===1){
console.log('执行成功')
}
})
插入数据的便捷形式
//演示插入数据得便捷方式
const users={username:'spider-man',password:'273891'}
//定义待执行的SQL语句
const sqlstr='insert into users set ?'
//执行SQL语句
db.query(sqlstr,users,(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows===1){
console.log('执行成功')
}
})
更新数据
const user={id:6, username:'spider-man',password:'273891'}
//定义待执行的SQL语句
const sqlstr='update users set username=?,password=? where id=?'
//执行SQL语句
db.query(sqlstr,[user.username,user.password,user.id],(err,results)=>{
if(err) return console.log(err.message)
//注意:执行了update语句之后,执行的结果,也是一个对象,可以通过affectedRows判断是否执行成功
if(results.affectedRows===1){
console.log('执行成功')
}
})
更新数据的便捷写法
const user={id:6, username:'spider-man',password:'273891'}
//定义待执行的SQL语句
const sqlstr='update users set ? where id=?'
//执行SQL语句
db.query(sqlstr,[user,user.id],(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows===1){
console.log('执行成功')
}
})
删除数据
const sqlstr='delete from users where id=?'
//执行SQL语句
//注意,多个占位符则需要使用数组,一个占位符则可以直接使用数值
db.query(sqlstr,5,(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows===1){
console.log('执行成功')
}
})
标记删除
使用DELETE语句,会把真正的把数据从表中删除掉。为了保险起见,推荐使用标记删除的形式,来模拟删除的动作。
所谓的标记删除,就是在表中设置类似于status这样的状态字段,来标记当前这条数据是否被删除。
当用户执行了删除的动作时,我们并没有执行DELETE语句把数据删除掉,而是执行了UPDATE语句,将这条数据对压的status字段标记为删除即可。