MYSQL

数据库相关概念

  • 数据库:存储数据的仓库,数据是有组织的进行存储
  • 数据库管理系统:操纵和管理数据库的大型软件
  • SQL:操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准

MYSQL数据库

关系型数据库

概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库

特点:

  • 使用表存储数据,格式统一,便于维护
  • 使用SQL语言操作,标准统一,使用方便

SQL的通用语法

  • SOL语句可以单行或多行书写,以分号结民。
  • SOL语句可以使用空格/縮进来增强语句的可读性。
  • MySOL数据库的SOL语句不区分大小写,关链宇建议使用大写。
  • 注释: 单行注释:–注释内容 或#注释内容(MySOL特有) 多行注释:/* 注释内容容*/,

SQL分类

DDL(Data Defintion Language):数据定义语言,用来定义数据库对象(数据库,表,字段)

DML(Data Manipulation Language):数据操作语言,用来对数据库表中的数据进行增删改

DQL((Data Query Language):数据查询语言,用来查询数据库中表的记录

DCL(Data Control Language):数据控制语言,用来创建数据库账户,控制数据库的访问权限

函数

一段可以直接被另一段程序调用的程序或代码

数据库函数有哪些-常见问题-PHP中文网

字符串函数

字符串函数

数值函数

数值函数

日期函数

日期函数

流程函数

流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选从而提高语句的效率

流程函数

约束

概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据

目的:保证数据库中数据的正确,有效性和完整性

分类

  • 非空约束:限制该字段的数据不能为null 关键字:NOT NULL
  • 唯一约束:保证该字段的所有数据都是唯一,不重复的 关键字:UNIQUE
  • 主键约束:主键是一行数据的唯一标识,要求非空且唯一 关键字:PRIMARY KEY
  • 默认约束:保存数据时,如果未指定该字段的值,则采用默认值 关键字:DEFAULT
  • 检查约束:保证字段值满足某一个条件 关键字:CHECK
  • 外键约束:用来让两张表的数据之间建立连接,保证数据的一致性和完整性 关键字:FOREOGN KEY

外键约束的删除/更新行为

NO ACTION:当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与RESTRICT一致)

RESTRICT:当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与NO ACTION一致)

CASCADE:当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则也删除/更新外键在子表中的记录。

SET NULL:当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为NULL(这要求外键允许取null)

SET DEFAULT:父表变更时,子表将外键列设置成一个默认的值(Innodb不支持)

语法:

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGNKEY(外键字段) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE

多表查询

各表结构之间基本存在三种关系

  • 一对多
  • 多对多
  • 一对一

概述:从多张表中查询数据

笛卡尔积:笛卡尔乘积是指在数学中,两个集合A集合和B集合的所有组合情况

多表查询分类

连接查询

  • 内连接:相当于查询A,B交际部分数据

  • 外连接:

    • 左外连接:查询左表所有数据,以及两张表交集部分数据

      • 语法:select 字段列表 from 表1 left [outer] join 表2 on 条件
    • 右外连接:查询右表所有数据,以及两张表交集部分数据

      • 语法:select 字段列表 from 表1 right[outer] join 表2 on 条件
  • 自连接:当前表与自身的连接查询,连接必须使用表别名

    • 语法:select 字段列表 from 表a 别名a join 表a 表名 b on条件

联合查询

对于union查询,就是把多次查询的结合合并起来,形成以恶搞新的查询结果集

语法:

select 字段列表 from 表a …

union [all]

select 字段列表 from 表b …

对应联合查询的多张表的列数必须保持一致,字段类型也需要保持一致

union all 会将全部的数据直接合并在一起,union会对合并之后的数据去重

子查询

概念:SQL语句中嵌套SELECT语句,称为嵌套查询,又称为子查询

select * from t1 where column = (select column1 from t2)

事务

一组操作集合,要么同时成功,要么同时失败

事务操作

事务的四大特性

  • 原子性 (Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

  • 一致性 (Consistency):事务完成时,必须使所有的数据都保持一致状态。

  • 隔离性 (Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

  • 持久性 (Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

并发事务问题

  • 脏读:一个事务读取到另一个事务还没有提交的数据
  • 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读
  • 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像是出现了幻影

事务的隔离级别

事务隔离级别

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

SQL优化

SQL优化最干货总结 - MySQL(2020最新版) - 知乎 (zhihu.com)