前端程序员需要了解的MySQL

数据库的基本概念#

数据库(database)是用来组织存储管理数据的仓库。对数据库中的数据可以进行增删改查操作。市面上常见的数据库有:

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

MySQL、Oracle、SQL Server属于传统型数据库(关系型数据库或SQL数据库),Mongodb属于新型数据库(非关系型数据库或NoSQL数据库)(相互弥补

数据组织结构:数据库(database)、数据表(table)、数据行(row)、字段(filed)

MySQL的基本使用#

使用MySQL Workbench管理数据库#

MySQL Workbench:可视化的MySQL管理工具

连接数据库:

image.png
主界面的组成:

image.png
创建数据库:

image.png

创建数据库表:

image.png

DataType数据类型:

  • int 整数
  • varchar(len) 字符串
  • tinyint(1) 布尔值

字段的特殊标识:

  • PK (Primary Key)主键、唯 标识
  • NN (Not Null) 不允许为空
  • UQ(Unique) 值唯一
  • Al (AutoTncrement)值自动增长

向表中写入数据:

image.png

使用SQL管理数据库#

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

  • SQL是一门数据库编程语言
  • 使用SQL编写出来的代码,叫做SQL语句
  • SQL语言只能在关系型数据库中使用

SELECT语句#

SELECT语句用于从表中查询数据。执行的结果被存储在一个结果表中。

SELECT * FROM 表名称
SELECT 列名称1,列名称2 FROM 表名称
-- SQL语句中的关键字对大小写不敏感

INSERT INTO语句#

INSERT INTO用于向数据表中插入新的数据行。

INSERT INTO table_name(列1,列2,...) VALUES(值1,值2,...)
-- 列和值要一一对应

UPDATE语句#

UPDATE用于修改数据表中的数据。

-- 1、UPDATE 指定更新的表
-- 2、SET 指定列对应的新值
-- 3、WHERE 指定更新条件
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

UPDATE user SET password ='888888' WHERE id = 4
-- 把user表中id为4的用户密码更新为888888

UPDATE user SET password ='123456',status=1 WHERE id = 7
-- 把user表中id为7的用户密码更新为888888,用户状态更新为1

DELETE语句#

DELETE用于删除数据表中的数据。

DELETE FROM 表名称 WHERE 列名称=

WHERE子句#

WHERE用于限定选择的标准,可以使用下列运算符:

image.png

AND和OR运算符#

AND必须同时满足多个条件

OR只要满足任意一个条件即可

ORDER BY语句#

ORDER BY用于根据指定的列对结果进行排序。

SELECT * FROM user ORDER BY status
SELECT * FROM user ORDER BY status ASC -- 升序
SELECT * FROM user ORDER BY status DESC -- 降序

SELECT * FROM user ORDER BY status DESC,username ASC -- 多重排序

COUNT(*)函数#

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

SELECT COUNT(*) FROM 表名称

-- 使用AS为列设置别名
SELECT COUNT(*) as total FROM users WHERE status=0

在Expres中操作MSQL#

  • 安装操作MySQL数据库的第三方模块(mysql)
  • 通过mysql模块链接到MySQL数据库
  • 通过mysql模块执行SQL语句
npm i mysql
const mysql = require('mysql')
//建立链接
const db = mysql.createPool({
    host: '127.0.0.1', //数据库的IP地址
    user: 'root',      //登录账号密码
    password: '123456',
    database: 'my_db_01'//指定操作那个数据库
})

//测试mysql模块能否正常工作
db.query('SELECT 1', (err, results) => {
    //这里的SQL语句没有任何意义
    if (err) return console.log(err.message)
    console.log(results)
})

//获取数据
db.query('select * from users', (err, results) => {
    if (err) return console.log(err.message)
    console.log(results)
})

//插入数据
const user = { username: '赵六', password: 'admin123' }
const sqlStr = 'insert into users (username,password) values (?,?)'
//占位符写法,防止SQL注入
db.query(sqlStr, [user.username, user.password], (err, results) => {
    if (err) return console.log(err.message)
    //如果执行insert语句,返回对象包含affectedRows
    if (results.affectedRows === 1) {
        console.log('插入数据成功!')
    }
})  
//id跳跃现象:跳过的id的数据被删除过,删除的数据可以回滚。

//更新数据
const user = { id: 2, username: '钱七', password: '000' }
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)
    //如果执行insert语句,返回对象包含affectedRows
    if (results.affectedRows === 1) {
        console.log('更新数据成功!')
    }
})

//删除数据
const sqlStr = 'delete from users where id=?'
db.query(sqlStr, 3, (err, results) => {
    if (err) return console.log(err.message)
    //如果执行insert语句,返回对象包含affectedRows
    if (results.affectedRows === 1) {
        console.log('删除数据成功!')
    }
})
//插入数据(简化写法)
const user = { username: '赵六', password: 'admin123' }
const sqlStr = 'insert into users (username,password) set ?' //属性顺序必须和表一一对应!!!
//占位符写法,防止SQL注入
db.query(sqlStr, user, (err, results) => {
    if (err) return console.log(err.message)
    //如果执行insert语句,返回对象包含affectedRows
    if (results.affectedRows === 1) {
        console.log('插入数据成功!')
    }
})
//id跳跃现象:跳过的id的数据被删除过,删除的数据可以回滚。

//更新数据(简化写法)
const user = { id: 2, username: '钱七', password: '000' }
const sqlStr = 'update users set ? where id=?'
//占位符写法,防止SQL注入
db.query(sqlStr, [user, user.id], (err, results) => {
    if (err) return console.log(err.message)
    //如果执行insert语句,返回对象包含affectedRows
    if (results.affectedRows === 1) {
        console.log('更新数据成功!')
    }
})

标记删除:使用DELETE语句,会把真正的把数据从表中删除掉。为了保险起见,推荐使用标记删除的形式,来模拟删除的动作。所谓的标记删除,就是在表中设置类似于 status 这样的状态字段,来标记当前这条数据是否被删除,当用户执行了删除的动作时,我们并没有执行 DELETE 语句把数据删除掉,而是执行了 UPDATE 语句,将这条数据对应的status字段标记为删除。

posted @   辜负寒彻骨  阅读(572)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
  1. 1 逝年 夏小虎
逝年 - 夏小虎
00:00 / 00:00
An audio error has occurred.

作词 : 刁云逸

作曲 : 夏小虎

风里飘雪的花

在记忆之中发芽

那些红色绿色

我们的青春年华

志向无限远大

转眼已各奔天涯

独自走在街上

只看见曾经的晚霞

时间似流水

催促我们长大

年轻的心有了白发

当初的人呐

你们如今在哪

是否也在寻找梦的家

风里飘雪的花

在记忆之中发芽

那些红色绿色

我们的青春年华

志向无限远大

转眼已各奔天涯

独自走在街上

只看见曾经的晚霞

时间似流水

催促我们长大

年轻的心有了白发

当初的人呐

你们如今在哪

是否也在寻找梦的家

时间似流水

催促我们长大

年轻的心有了白发

当初的人呐

你们如今在哪

是否也在寻找梦的家

点击右上角即可分享
微信分享提示
主题色彩