🗒️MySQL数据库复习(基础)
00 分钟
2023-9-26
2023-9-27
type
status
date
slug
summary
tags
category
icon
password

数据库相关概念

数据库:Database,简称DB。按照一定的数据结构来组织、存储和管理数据的仓库。
数据库管理系统:Database Management System,一种操纵和管理数据库的大型软件,用于创建、使用和维护数据库,简称DBMS。
notion image
  • 关系型数据库(RDBMS)
    • 关系型数据库,是建立在关系模型基础上,由多张相互连接的二维表组成的数据库。 特点:
      1. 使用表存储数据,格式统一,便于维护
      1. 使用SQL语句操作,标准统一,使用方便
      1. 数据存储在磁盘中,安全
      notion image
       
  • 非关系型数据库(NoSQL)
    • 概念:Not-Only SQL,泛指非关系型数据库,是对关系型数据库的补充。 特点:
      1. 数据结构灵活
      1. 伸缩性强
notion image
SQL:
  • 结构化查询语言(Structured Query Language),简称SQL。
  • 是一种操作关系型数据库的编程语言,定义了一套操作关系型数据库统一SQL标准 。
数据模型:
notion image

SQL基础

SQL通用语法

  1. SQL语句可以单行或多行书写,以分号结尾。
  1. SQL语句可以使用空格/缩进来增强语句的可读性。
  1. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
  1. 注释: • 单行注释:-- 注释内容 或 # 注释内容(MySQL特有) • 多行注释: /* 注释内容 */

SQL分类

notion image

DDL

DDL-数据库操作(方括号框起来表示可选)
notion image
DDL-表操作-查询
前提是先通过use 数据库名;切换到对应的数据库下。
notion image
DDL-表操作-创建
notion image
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型
类型
大小
有符号(SIGNED)范围
无符号(UNSIGNED)范围
描述
TINYINT
1 byte
(-128,127)
(0,255)
小整数值
SMALLINT
2 bytes
(-32768,32767)
(0,65535)
大整数值
MEDIUMINT
3 bytes
(-8388608,8388607)
(0,16777215)
大整数值
INT或INTEGER
4 bytes
(-2147483648,2147483647)
(0,4294967295)
大整数值
BIGINT
8 bytes
(-2^63,2^63-1)
(0,2^64-1)
极大整数值
FLOAT
4 bytes
(-3.402823466 E+38,3.402823466351 E+38)
0 和 (1.175494351 E-38,3.402823466 E+38)
单精度浮点数值
DOUBLE
8 bytes
(-1.7976931348623157 E+308,1.7976931348623157 E+308)
0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308)
双精度浮点数值
DECIMAL
例如123.45 M是5,D是2
依赖于M(精度)和D(标度)的值
依赖于M(精度)和D(标度)的值
小数值(精确定点数)
字符串类型
blob描述二进制数据(一般不用),text描述文本数据
类型
大小
描述
CHAR
0-255 bytes
定长字符串
VARCHAR
0-65535 bytes
变长字符串
TINYBLOB
0-255 bytes
不超过255个字符的二进制数据
TINYTEXT
0-255 bytes
短文本字符串
BLOB
0-65 535 bytes
二进制形式的长文本数据
TEXT
0-65 535 bytes
长文本数据
MEDIUMBLOB
0-16 777 215 bytes
二进制形式的中等长度文本数据
MEDIUMTEXT
0-16 777 215 bytes
中等长度文本数据
LONGBLOB
0-4 294 967 295 bytes
二进制形式的极大文本数据
LONGTEXT
0-4 294 967 295 bytes
极大文本数据
在MySQL中,CHARVARCHAR都是用来存储文本数据的数据类型,但它们之间有一些重要的区别:
  1. 存储方式:
      • CHARCHAR类型以固定长度存储字符数据,无论实际数据长度是多少,它会占据指定的固定空间。例如,如果定义一个CHAR(10)字段,并且存储的数据只有5个字符,MySQL仍会分配10个字符的存储空间。
      • VARCHARVARCHAR类型以可变长度存储字符数据,只会占据实际数据长度所需的空间,不会浪费空间。因此,如果存储的数据只有5个字符,那么VARCHAR(10)将只占用5个字符的存储空间。
  1. 存储效率:
      • CHAR类型在存储固定长度的数据时可能会浪费存储空间,但在某些情况下,它可以比VARCHAR更快,因为MySQL无需记录每个值的实际长度。
      • VARCHAR类型在存储可变长度的数据时更节省存储空间,但在某些情况下,由于需要额外的长度信息,可能会稍微慢一些。
最佳实践:
  • 选择CHARVARCHAR取决于你要存储的数据类型和使用场景。
  • 使用CHAR
    • 当你知道数据长度几乎是固定的,且很少变化时,使用CHAR可以提高存储效率。
    • 例如,存储邮政编码、国家/地区代码等固定长度的标识符时,CHAR可能是一个不错的选择。
  • 使用VARCHAR
    • 当你的数据长度变化较大或者不确定时,使用VARCHAR可以节省存储空间。
    • 例如,存储用户姓名、评论或文章内容等可变长度的文本数据时,VARCHAR通常更合适。
总之,选择CHAR还是VARCHAR应该根据你的具体需求和数据特点来决定,权衡存储效率和空间节省的需求。
日期类型
一般是DATE或者DATETIME用的比较多
类型
大小
范围
格式
描述
DATE
3
1000-01-01 至 9999-12-31
YYYY-MM-DD
日期值
TIME
3
-838:59:59 至 838:59:59
HH:MM:SS
时间值或持续时间
YEAR
1
1901 至 2155
YYYY
年份值
DATETIME
8
1000-01-01 00:00:00 至 9999-12-31 23:59:59
YYYY-MM-DD HH:MM:SS
混合日期和时间值
TIMESTAMP
4
1970-01-01 00:00:01 至 2038-01-19 03:14:07
YYYY-MM-DD HH:MM:SS
混合日期和时间值,时间戳
在创建数据库表时,有一些最佳实践和需要注意的地方可以帮助确保表的设计和性能都符合预期:
  1. 选择适当的数据类型
      • 使用最小的数据类型,以节省存储空间,例如使用INT而不是BIGINT,如果数据范围允许。
      • 使用合适的字符集和校对规则,确保支持所需的字符和语言。
  1. 使用主键
      • 为每个表定义一个主键,以确保数据的唯一性和快速检索。
      • 考虑使用自增主键(如AUTO_INCREMENT)来简化主键管理。
  1. 创建索引
      • 对于经常用于查询条件的列,创建索引以提高检索性能。
      • 注意不要过度索引,因为过多的索引可能会降低插入和更新性能。
  1. 避免NULL约束
      • 谨慎使用NULL,尽量避免在列上使用过多的NULL约束。如果某列不需要存储空值,最好使用NOT NULL约束。
  1. 规范化数据库
      • 使用规范化技术,将数据分解为多个相关表,以减少数据冗余,并维护数据的一致性。
      • 但要注意,不要过度规范化,因为这可能导致复杂的查询和性能下降。
  1. 考虑表的命名规范
      • 使用有意义的、描述性的表名和列名,以便更容易理解和维护数据库结构。
      • 遵循一致的命名约定,例如使用下划线或驼峰命名法。
  1. 设定默认值
      • 为列设置适当的默认值,以便在插入新行时提供默认数据。
      • 这有助于确保数据的完整性,并简化插入操作。
  1. 审慎使用触发器和存储过程
      • 触发器和存储过程可以用于实现复杂的业务逻辑,但应慎重使用,因为它们可能会增加数据库复杂性。
  1. 定期维护和备份
      • 定期备份数据库以防止数据丢失,并定期执行数据库维护任务,如优化查询和清理无用数据。
  1. 安全性考虑
      • 谨慎处理敏感数据,使用适当的权限管理来保护数据。
      • 避免在应用程序中直接构建SQL查询,以防止SQL注入攻击。
  1. 性能监控和调优
      • 定期监控数据库性能,识别潜在的性能问题,并进行必要的调优,如优化查询、添加索引等。
  1. 版本控制
      • 将数据库模式纳入版本控制系统,以便跟踪和管理表结构的变化。
DDL-表操作-修改
添加字段
notion image
修改字段
notion image
删除字段
notion image
修改表名
notion image
删除表
notion image
小结
notion image

DML

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。
添加数据(INSERT)
notion image
修改数据(UPDATE)
notion image
删除数据(DELETE)
notion image
小结
notion image

DQL(重要)

DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。
查询关键字:SELECT
语法结构
notion image
基本查询
notion image
条件查询
notion image
聚合函数
  1. 将一列数据作为一个整体,进行纵向计算 。
  1. 常见的聚合函数:
    1. notion image
  1. 语法:
    1. notion image
分组查询
  1. 语法
    1. notion image
  1. where和和having的区别
    1. 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
    2. 判断条件不同:where不能对聚合函数进行判断,而having可以。
  1. 注意
    1. 执行顺序: where > 聚合函数 > having 。
    2. 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。 所以在分组之后一般查询字段列表是聚合函数,会对各个分组进行聚合函数处理
  1. 案例
    1. notion image
       
排序查询
notion image
分页查询
  1. 语法
    1. notion image
  1. 注意
    1. 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
    2. 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
    3. 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。
    4. 第一页索引是0
执行顺序
notion image
可以通过别名去验证这个执行顺序,因为只有我在你执行之前定义了别名你才能使用
notion image
总结
notion image

DCL

DCL英文全称是data control language (数据控制语言),用来管理数据库数据库服务器用户 、控制数据库的访问权限。 有哪些用户、用户有哪些权限。
notion image
管理用户
notion image
权限控制
notion image
notion image
总结
notion image
 

函数

函数 是指一段可以直接被另一段程序调用的程序或代码。

字符串函数

MySQL中内置了很多字符串函数,常用的几个如下:
notion image
substring的索引值是从1开始的
 

数值函数

notion image
notion image

日期函数

notion image
日期 = “2021-10-11” 时间 = “23:22:11” 日期和时间 = “2021-10-11 23:22:11”
notion image
notion image

流程函数

notion image
案例
notion image
notion image
值判断和表达式判断两种写法形式不一样
notion image
notion image

小结

notion image

约束

notion image
唯一约束:表中任意两行在 指定列上都不允许有相同的值,允许空(NULL).一个表上可以放置多个唯一性约束
案例
notion image
 
外键约束
外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性
notion image
notion image
小结
notion image

多表查询

多表关系

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所 以各个表结构之间也存在着各种联系,基本上分为三种:
  1. 一对多(多对一)
    1. notion image
  1. 多对多
    1. notion image
  1. 一对一
    1. notion image

多表查询

概述: 指从多张表中查询数据
笛卡尔积
笛卡尔乘积是指在数学中,两个集合A集合和B集合的所有组合情况。(在多表查询时,需要消除无效的笛卡尔积)
notion image
notion image
多表查询分类
连接查询
  1. 内连接:相当于查询A、B交集部分数据
    1. notion image
      notion image
      inner这个关键词是可以省略的
  1. 外连接:
    1. 左外连接:查询左表所有数据,以及两张表交集部分数据
    2. 右外连接:查询右表所有数据,以及两张表交集部分数据
    3. 左外会用的比较多,因为无论是左外还是右外都是可以通过替换表名来交换使用的。
    4. notion image
      notion image
  1. 自连接:当前表与自身的连接查询,自连接必须使用表别名
notion image
notion image
联合查询
notion image
子查询
notion image
标量子查询
notion image
列子查询
notion image
notion image
行子查询
notion image
notion image
表子查询
notion image
notion image
总结
notion image

事务

事务的简介

事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。

事务操作

notion image
notion image

事务的四大特性(ACID)

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

并发事务问题

notion image
notion image
notion image
notion image

事务隔离级别

notion image
注意:事务隔离级别越高,数据越安全,但是性能越低。
notion image

总结

notion image