目录

一.数据库简单介绍

二.进一步了解MySQL

三.安装MySQL并配置

四.使用SQL语句管理数据库

1.SQL语言中的注释

2.SELECT查询语句

3.INSERT INTO插入语句

4.URDATE修改语句

5.DELETE删除语句

6.精讲WHERE子句

7.ORDER BY排序子句

8.COUNT(*)函数

五.在项目中链接并操作MySQL

1.配置mysql模块

2.简单测试MySQL数据库链接是否正常以及mysql模板是否可以正常工作

3.查询操作

4.插入操作

5.更新数据

6.删除操作与标记删除


一.数据库简单介绍

数据库(database)是组织、存储、管理数据的仓库,互联网中的数据都有数据库来存储以及管理,用户可以对数据库中的数据来进行增删改查的操作,我们今天要阐述的并使用的就是MySQL数据库,MySQL数据库也叫传统型数据库、关系型数据库或者SQL数据库(同样为该类型的数据库还有Oracle以及SQL Server),与之相互补的有一种非关系型数据库,也叫新型数据库或NoSQL数据库,以mongodb为例,我们在之前章节阐述过


二.进一步了解MySQL

MySQL是由数据库(database)、数据表(table)、数据行(row)、列【字段】(field)这四样构成,以这样的组织结构来进行存储

我们一般需要对每一个项目都建立一个与之相对应的独立的数据库

不同的数据需要存储在不同的表中

每一个表中具体需要存储哪些信息,由列决定

表中的行,代表每一条具体的数据


三.安装MySQL并配置

我们需要安装

MySQL Server:提供数据存储和服务的软件

MySQL Workbench:可视化MySQL管理工具

我们下载其mysql-installer-community-8.0.28.0.msi文件就可以,直接将所有的配置都安装上(windows)

下载地址:MySQLhttps://www.mysql.com/cn/

安装配置好之后,我们可以打开MySQL Workbench 8.0 CE软件运行数据库

*我们在安装配置时输入的密码需要记住,以此来链接数据库

我们可以在可视化工具中创建库、创建表等等

创建库:点击创建库选项-->填写库名-->Apply

创建表:

展开创建好的库-->Table右键-->Create Table-->填写表名称-->表描述(Comments)[可以不写]-->填写表字段-->Apply

创建表需要知道的数据类型及特殊标识 :

DataType数据类型:

int:整数        varchar(length):字符串【length表示限制字符串长度】

tinyint(0):布尔值

字段特殊标识:

PK(Primary Key):主键(唯一标识)

NN(Not Null):值不能为空

UQ(Unique):值唯一(只要前期创建过,后期就算删除了数据也会占用这个唯一的值)

AI(Auto Increment):值自动增长

Default/Expression:默认值

如果我们已经创建好表了,但是还想向表中添加数据,我们可以:

数据表右键-->Select Rows - Limit1000-->输入

不过毕竟我们在真正的项目中是必须要用SQL语句来进行操作,所以可视化图形工具只要会简单的使用就可以了,不需要做太深的研究 ,主要还是SQL语言的学习


四.使用SQL语句管理数据库

SQL(Structured Query Language)是结构化查询语言,专门用来访问和处理数据库的编程语言,能够让我们以编程的形式操作数据库里面的数据,和其他编程语言一样,也有专门的SQL语句来进行数据库的编程

tips:SQL语言只能在非关系型数据库中使用,不能再类似mongodb这样的非关系型数据库中使用

tips:SQL语句的关键字对大小写不敏感 

1.SQL语言中的注释

-- 这是一段SQL注释

2.SELECT查询语句

SELECT用来从表中查询数据,执行的结果被存储在一个结果集中(结果集也是以表的格式来显示)

假如我们现在想要查询users表中的所有数据:

SELECT * FROM users

(from)也就是从users表中查询(*通配符)所有的数据

这样是查询出整个表中的所有数据了,如果我们想要查询一个列(字段)的所有数据呢?

SELECT 字段(列)名称 FROM users 

意思是从指定的表中查询出指定列的所有数据

查询多个列:

SELECT 列1名称,列2名称,列N名称 FROM users

3.INSERT INTO插入语句

向数据表中插入新的数据行

INSERT INTO users(列1,列2,列3) VALUES(列1对应的值,列2对应的值,列3对应的值)

向users表中插入三条数据:列1:列1对应的值,列1:列1对应的值,列1:列1对应的值

4.URDATE修改语句

URDATE users SET 列名=新值 WHERE 列名称=某值

意思是修改users表中列名为某值的那条数据,将它的列名改为新值

修改语句中涉及到了俩个我们没有见过的语句:

SET和WHERE

SET:指的是修改列名的新值

WHERE:指的是修改的条件,达到这个条件才可以修改

第一个列名和第二个列名不是一个列名,比如我们要在users表中修改id为80的那条数据,将它的password改为123456,并且将它的名字改为:小蜗:

URDATE users SET password= '123456',username='小蜗' WHERE id=80

5.DELETE删除语句

假如我们现在想要删除id值为100的那个用户信息

DELETE FROM users WHERE id=100-- DELETE FROM users WHERE 列名称=值

6.精讲WHERE子句

之前我们UPDATE修改语句中说到过WHERE语句,它其实就是用于限定选择的一个标准,也就是说达到了这个限定才可以执行前面的主语句,没有WHERE前面的语句也可以执行,但是会将表中的所有数据都修改,所以使主语句更加的完整的WHERE语句就被称为子语句

我们之前都是使用"="符号来限制条件,其实WHERE语句也可以使用其他的运算符

=:等于

>:大于

<:小于

>=:大于等于

<=:小于等于

!=/<>:不等于

BETWEEN:在某个范围内

LIKE:搜索某种模式

AND:表示同时满足俩个或多个条件时执行相关操作

DELETE FROM users WHERE id>100 AND status=1

OR:表示只要满足俩个或多个其中一个就可以执行相关操作

DELETE FROM users WHERE id>100 OR status=1

7.ORDER BY排序子句

ORDER BY用于根据的指定的列,来对相关数据进行排序

升序ASC

SELECT * FROM users ORDER BY id-- 或者是:SELECT * FROM users ORDER BY id ASC

因为ORDER BY具有默认值,它的默认值就是升序,所以我们可以不写

降序

SELECT * FROM users ORDER BY id DESC

多重排序

SELECT * FROM users ORDER BY id DESC,status=0,username ASC

8.COUNT(*)函数

COUNT(*)函数用来返回查询结果的总数据条数

假如我们想要获取users表中一共有几条数据(几行)

SELECT COUNT(*) FROM users

其中AS语句可以为获取到的结果集命令。如果不命名的话,我们获取到的结果集的列名称就为COUNT(*)表达不了意思,也不好看:

假如我们现在想要知道status值为1的用户有多少,并将获取到的结果集的列名改为errnum:

SELECT COUNT(*) AS errnum FROM users WHERE status=1

 我们发现status值为1的用户有一个,并将查询到的结果集的名称改为了errnum


五.在项目中链接并操作MySQL

在node环境中,我们 可以直接下载一个第三方的包,叫做mysql

然后链接到我们的MySQL数据库,最后通过mysql模块执行SQL语句,就可以实现对数据库的操作了,我们可以通过模板引擎或者模板字符串等方式动态渲染到UI页面

1.配置mysql模块

下载就不需要多说了,我们require导入完成之后

建立于MySQL数据库的链接:

//导入
const mysql = require('mysql')
//链接
const db = mysql.createPool()

其实链接不算完成,我们需要在createPool方法中以填写我们的MySQL数据库信息对象,然后才可以真正的建立链接:

//导入
const mysql = require('mysql')
//链接
const db = mysql.createPool({host:'127.0.0.1',user:'root',password:'admin123'database:'my_testdb'
})

host:代表数据库的IP地址

user:代表登录数据库的账号名称

password:代表登录数据库的账号密码

database:被操作数据库名称

2.简单测试MySQL数据库链接是否正常以及mysql模板是否可以正常工作

在我们执行SQL语句的时候,需要调用是query()函数,来指定要执行的SQL语句以及回调函数

//导入
const mysql = require('mysql')
//链接
const db = mysql.createPool({host:'127.0.0.1',user:'root',password:'admin123'database:'my_testdb'
})//SELECT 1没有实际性的作用,只是简单的测试一下
//如果错误返回err报错,如果正确返回results值
//我们通过返回的正确值中不难看出,查询语句返回的是一个数组
db.query('SELECT 1',(err,results) => {if(err) return console.log("失败" + err.message)console.log(results)
})//打印出[RowDataPacket {'1':1}]表示成功,链接正常

3.查询操作

//查询
const dbStr = 'SELECT * FROM users'
db.query(dbStr,(err,results) => {if(err) return console.log("请求错误" + err.message)console.log(results);
})

我们查询了users表中的所有数据

4.插入操作

//插入(繁琐)
const dbStr = {username:"小giao",password:"@giao998"
}
const sqlStr = 'insert into users (username,password) values(?,?)'db.query(sqlStr,[dbStr.username,dbStr.password],(err,results) => {if(err) return console.log("错误" + err.message)if(results.affectedRows === 1){console.log("插入成功");}
})

我们发现在给值的时候,我们使用了?,后续通过填充而实现了插入的操作

?其实就是SQL语句中的占位符,我们现在占位,然后后续有了动态的值传进来,实现动态的插入

多个值我们使用[]数组的形式包含起来

成功之后的返回值affectedRows是一个属性,表示我们执行了这条SQL语句影响到的行数,我们就插入了一行数据,所以当affectedRows等于1的时候,就表示插入成功

tips:执行INSERT INTO插入语句返回的值不是数组了,而是一个对象

简便写法

为什么会有简便写法,难道这还不见简便吗?

数据少的时候固然可以,但是如果我们需要写入很多很多数据呢?单单是?就需要写很多,非常的不好,所以我们:

const dbStr = {username:"老王",password:"985985211"
}//使用SET?即可将一一对应的数据填充到这里进行执行
const sqlStr = 'insert into users set ?'//直接将dbStr对象传过去
db.query(sqlStr,dbStr,(err,results) => {if(err) return console.log("错误" + err.message)if(results.affectedRows === 1){console.log("插入成功");}
})

这次,无论我们有多少的数据,都只需要写一个问号,不需要写很多的语句以及键值

tips:如果我们id值(主键)采用的是UQ值为一且AI自动增长的话,我们删除了id为100的用户,再进行新注册用户的话,这个用户不可以再占用id100的位置了,新用户应该依次为101,消失的100就算删了也不能重复占用 

5.更新数据

它的返回值也是一个对象

同样我们使用最便捷的方式来做例子:

//更新
const dbStr = {id:2,username:"小郭",password:"985985211"
}
const sqlStr = 'update users set ? where id=?'db.query(sqlStr,[dbStr,dbStr.id],(err,results) => {if(err) return console.log("错误" + err.message)if(results.affectedRows === 1){console.log("更新成功");}
})

tips:如果SQL语句中有多个占位符,必须使用数组来为每一个占位符指定具体的值,如果只有一个占位符,我们就可以省略数组 

6.删除操作与标记删除

返回值也是一个对象,我们可以更具ID值来删除对应的数据,因为id值是唯一的,不会多删误删

删除建议并不要真正的删除用户数据,使用DELETE会把用户的数据从表中真正的删除掉,一些重要的用户信息不可以使用DELETE来删除,我们可以使用标记删除来模拟一个删除的动作

比如我们建一个status列,为布尔值类型,为0时用户正常,为1时用户删除,使用status来标记删除

本质就是用户执行删除之后,我们并没有真正的删除,而是使用修改语句将status的值改为1

//更新
const dbStr = {id:2}
const sqlStr = 'update users set status=1 where id=?'db.query(sqlStr,dbStr,(err,results) => {if(err) return console.log("错误" + err.message)if(results.affectedRows === 1){console.log("删除成功");}
})

MySQL基本增删改查以及搭配node在项目中的操作相关推荐

  1. Node.js笔记-node.js连接MySQL与增删改查

    最近在看一个开源项目,项目用的是node.js,在此学习下他的连接mysql与增删改查. 安卓mysql包: npm install mysql 程序运行截图如下: D:\node\content\n ...

  2. eggjs增删改查MySQL,nodejs操作mysql实现增删改查

    首先需要安装mysql模块:npm install mysql –save 然后创建user数据表: 接着使用nodejs对数据库进行增删改查: //引入mysql模块 var mysql = req ...

  3. nodejs mysql 增删改查_nodejs操作mysql实现增删改查的实例

    首先需要安装mysql模块:npm install mysql --save 然后创建user数据表: 接着使用nodejs对数据库进行增删改查: .[活动]2017 CSDN博客专栏评选 [评论送书 ...

  4. sqlalchemy 对 mysql 进行增删改查

    我其实还是喜欢原生的 sql 语句,sqlalchemy是对pymysql的封装,用的时候经常出各种错误.但是orm操作较简单,可以实现外键的关联操作. 视频 https://www.bilibili ...

  5. python操作mysql的增删改查_详解使用pymysql在python中对mysql的增删改查操作(综合)...

    这一次将使用pymysql来进行一次对MySQL的增删改查的全部操作,相当于对前五次的总结: 先查阅数据库: 现在编写源码进行增删改查操作,源码为: #!/usr/bin/python #coding ...

  6. 怎么用php操作mysql删除数据库代码_如何使用php操作mysql的增删改查?

    php操作mysql的增删改查方法:1.插入语句[insert into 数据表名(字段1,字段2,....) values("值1","值2",..)]:2. ...

  7. Mysql (一)Mysql 数据库增删改查

    mysql数据库增删改查增:create database DBname charset gbk; 删:drop database DBname; 改:alter database DBname ch ...

  8. Go操作mysql实现增删改查及连接池

    [-] 下载驱动 创建测试表 数据库连接 插入操作 查询操作 修改操作 删除操作 完整代码 小结 开启web服务 db对象初始化 请求方法 小结 golang本身没有提供连接mysql的驱动,但是定义 ...

  9. Java连接Mysql数据库增删改查实现

    Java连接Mysql数据库增删改查实现 时间比较赶,我这里只实现查询,有时间再添加另外两个 难度 : ⭐⭐⭐(全星5颗星的情况下) 新建一个动态的网站工程, 把jar包全部复制进去,主要要那个mys ...

最新文章

  1. 双圆弧插值算法(一)
  2. 武汉计算机组成原理八校联盟考试,武汉理工大学《计算机组成原理》在线练习及考试题目.doc...
  3. 解决WIN7与虚拟机CentOS的文件夹共享问题
  4. 【IntelliJ IDEA】中文乱码问题 ( 代码乱码 | 编译乱码 | 控制台乱码 )
  5. Vue项目端口号占用
  6. dev treeview控件_在winform中怎样实现好看的treeview样式
  7. UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习
  8. 如何使用VisualVM监视服务器上的多个JVM
  9. Android 之父裁员 30%:开发者如何避免“被离职”?
  10. mysql的安装与卸载
  11. 永中office linux卸载,永中office Linux版
  12. 线性代数05 齐次/非齐次线性方程组的具体解集
  13. 美国北亚利桑那大学计算机专业排名,美国北亚利桑那大学排名学费
  14. 3d建模软件安装教程,游戏建模必备软件推荐(收藏)
  15. PAT乙级练习题1030 完美数列
  16. android 应用性能监控软件,App性能监控工具
  17. 硬件基础:台式电脑上的常用的几个接口!
  18. ${}和`${}`的用法
  19. 金庸武侠年表,终于把每部人物关系串起来了
  20. CTF-MD5之守株待兔,你需要找到和系统锁匹配的钥匙 WP

热门文章

  1. 经典查找算法 --- B+树
  2. Java基础(二)集合
  3. 简单三招,设计复杂ERP报表
  4. Web移动端Fixed布局的解决方案(原文出处:http://efe.baidu.com/blog/mobile-fixed-layout)
  5. 数据可视化第八章使用matplotlib绘制高级图表
  6. GB28380台式计算机,微型计算机能效限定值及能效等级 GB28380-2012
  7. 含泪讲述拿到美团offer的心酸历程......
  8. 【转载】最新读《你当像鸟飞往你的山》读后感心得体会5篇精选
  9. Mac电脑:您的安全性偏好设置仅允许安装来自App Store和被认可的开发者的应用(解决方法)
  10. Windows 句柄泄露学习总结