数据库的基本概念

数据库(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管理工具

连接数据库:



主界面的组成:



创建数据库:

创建数据库表:

DataType数据类型:

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

字段的特殊标识:

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

向表中写入数据:

使用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用于限定选择的标准,可以使用下列运算符:

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字段标记为删除。

前端程序员需要了解的MySQL的更多相关文章

  1. 前端程序员:月薪 5K 到 5 万,我干了啥(转)

    转自:http://www.imooc.com/article/4110 前端程序员:月薪 5K 到 5 万,我干了啥前端开发工作已经变的越来越复杂,仅仅是想罗列一份前端开发的学习列表就已经是一件艰巨 ...

  2. 前端程序员学python(爬虫向)(一文修到筑基期) (本文不含知识诅咒)

    我踏马来辣 还有一件事: 本教程配合c语言中文网 python爬虫 教程 食用 本教程不适用于未成年人 一定要刷牙 本教程不存在知识诅咒 学完本教程即可进入筑基期 js 基础和本教程学习效率成正比 不 ...

  3. web前端程序员真的值这么多钱吗?

    对于互联网公司来说用户就是上帝,做好客户体验一切才有可能.所以互联网公司都会把钱砸向前端,Web前端程序员也越来越受到企业争相聘用. 前端工程师工资也越来越高,目前Web前端工程师工作1~2年后通常会 ...

  4. 【原文】前端程序员必须知道的高性能Javascript知识

    原文:前端程序员必须知道的高性能Javascript知识 想必大家都知道,JavaScrip是全栈开发语言,浏览器,手机,服务器端都可以看到JS的身影. 本文会分享一些高效的JavaScript的最佳 ...

  5. 2018年一名合格的web前端程序员应该会哪些技术

    有朋友让小编说一说web前端在未来几年的发展趋向,对于这个问题,恕小编无能为力,web前端技术日新月异,更新非常快,谁也不能预料未来会发生些什么 小编也只能说在2018年,react native和j ...

  6. 前端程序员学习 Golang gin 框架实战笔记之一开始玩 gin

    原文链接 我是一名五六年经验的前端程序员,现在准备学习一下 Golang 的后端框架 gin. 以下是我的学习实战经验,记录下来,供大家参考. https://github.com/gin-gonic ...

  7. 前端程序员:月薪 5K 到 5 万,我干了啥

    高贵的前端程序猿们: 如何在前端开发这种高精尖的技术领域找到心仪的工作?实现在咖啡馆喝喝咖啡敲敲代码就能升职加薪.买房买车.迎娶白富美走上人生巅峰的职业梦想?这篇<进化论:从 0 到 100,前 ...

  8. 收集的WEB前端程序员需要的网站整理

    前端学习资源实在是又多又广,在这样的一个知识的海洋里,我们像一块海绵一样吸收,想要快速提高效率,平时的总结不可缺少,以下总结了一些,排版自我感觉良好,推送出来. 一.插件类网站 jQuery插件库:h ...

  9. WEB前端程序员需要的网站整理

    前端学习资源实在是又多又广,在这样的一个知识的海洋里,我们像一块海绵一样吸收,想要快速提高效率,平时的总结不可缺少,以下总结了一些,排版自我感觉良好,推送出来. 一.插件类网站 jQuery插件库:h ...

  10. 前端程序员:月薪 5K 到 5 万

    入行行头:5 大硬件 请准备好以下东西 一颗人类的大脑:智商在平均水平线以上即可 一份强烈的渴望:我的代码要可以运行在任何一个有浏览器的设备上. 一台笔记本电脑:不需要花费很多钱得那种,只要它可以运行 ...

随机推荐

  1. WPF中向下拉框中绑定枚举体

    1.枚举绑定combox的ItemsSourceItemsSource绑定的是个集合值,要想枚举绑定ItemsSource,首先应该想到的是把枚举值变成集合. 方法一:使用资源里的ObjectData ...

  2. mysql 1130报错只允许localhost登录解决方法

    提示:这些方法会改变登录权限,如果是生产服务器端谨慎操作!!! mysql出现错误码1130的解决办法: 错误描述: 错误代码:1130Host ***.***.***.*** is not allo ...

  3. 转L:[JAVA基础] 成员变量和局部变量(一看就懂的总结归纳篇)

    [JAVA基础] 成员变量和局部变量(一看就懂的总结归纳篇) JVM--Java虚拟机详解

  4. 【Java】RocketMQ

    <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-cli ...

  5. jenkins +docker+python接口自动化之docker下安装jenkins(一)

    1.下载jenkins启动docker服务之后,首先搜索可用的jenkins镜像 docker search jenkins 第一个是官方版本,但是已标明废弃了,让用第二个jenkisn/jenkin ...

  6. Delphi中KeyPress、KeyUp、keydown事件区别

    KeyPress: 当用户按下键盘上的字符键(字母,数字) 会触发该事件,功能键则不会(F1-F12,Ctrl,Alt,Shift) KeyUp: 当按下键盘上的按键松开时,会触发OnKeyUp事件( ...

  7. C#TimeSpan时间差转换成分钟和秒数

    public Form1() { InitializeComponent(); aa = DateTime.Now.ToString(); } string aa; private void butt ...

  8. Jmeter-接口测试(二)

    鉴权码获取: 1.通过接口获取 appid secret  (第三方用户唯一凭证, 第三方用户唯一凭证秘钥) 2.登录之后自动生成 username,password 一.jmeter 接口关联 1. ...

  9. ROS2踩坑记录

    在Windows10的WSL2中的Ubuntu22.04子系统中安装ros2 humble版本. 官方文档http://docs.ros.org/en/humble/Installation/Ubun ...

  10. Mysql的MVCC与幻读

    以下特殊情况在可重复读时会产生幻读: 1.a事务先select,b事务insert确实会加一个gap锁,但是如果b事务commit,这个gap锁就会释放(释放后a事务可以随意操作), 2.a事务再se ...