数据库的基本概念

常见数据库:

市面上的数据库有很多种,最常见的数据库有如下几个:

  • MySQL数据库(目前使用最广泛、流行度最高的开源免费数据库;Community + Enterprise)
  • Oracle数据库(收费)
  • SQL Server数据库(收费)
  • Mongodb数据库(Community + Enterprise)

其中,MySQL、Oracle、SQL Server属于传统型数据库(又叫做:关系型数据库或SQL数据

库),这三者的设计理念相同,用法比较类似。


而Mongodb属于新型数据库(又叫做:非关系型数据库或NoSQL数据库),它在一定程度上弥补了传统型数据库的缺陷。

 传统型数据库的数据组织结构

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

实际开发中库、表、行、字段的关系

  1. 在实际项目开发中,一般情况下,每个项目都对应独立的数据库。
  2. 不同的数据,要存储到数据库的不同表中,例如:用户数据存储到users 表中,图书数据存储到books表中。
  3. 每个表中具体存储哪些信息,由字段来决定,例如:我们可以为users 表设计id、username、password这3个字段。
  4. 表中的行,代表每一条具体的数据。 

使用MySQLWorkbench管理数据库

mongodb 现在互联网企业用的多吗 mongodb企业版收费吗_mongodb 现在互联网企业用的多吗

mongodb 现在互联网企业用的多吗 mongodb企业版收费吗_数据库_02

 

使用SQL管理数据库

SQL(英文全称: Structured Query Language)是结构化查询语言,专门用来访问和处理数据库的编程语言。能够让我们以编程的形式,操作数据库里面的数据。


关键点:

  1. SQL是一门数据库编程语言
  2. 使用SQL语言编写出来的代码,叫做SQL语句
  3. 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字段标记为删除即可。