mysql重点知识提取

完整版本:https://coderwcb.blog.csdn.net/article/details/121047560

概念

数据库就是用来存储和管理数据的仓库。

通过之前的学习,我们能够使用以下两种方式进行数据存储:

  1. 使用变量、对象、数组、集合存储数据,数据保存在内存(RAM)中;
  2. 使用文件(File)存储数据,保存在硬盘上。

数据库的发展历程

  • 无数据库,使用磁盘文件存储数据;
  • 层次结构数据库:IBM公司IMS(Information Management System)定向有序的树状结构实现存储和访问;
  • 网状结构数据库:美国通用电气公司IDS(Integrated Data Store),以节点形式存储和访问;
  • 关系结构数据库:Oracle、DB2、MySQL、SQL Server,使用二维表格来存储数据;
  • 非关系型数据库ElasticSearch、MongoDB、Redis,多数使用哈希表,表中以键值(key-value)的方式实现特定的键和一个指针指向的特定数据。

常见的关系型数据库产品

  • Oracle(神谕):美国Oracle(甲骨文)公司,主要用在电信,金融领域,下载免费,服务需要收费;
  • DB2:IBM,主要用在金融领域;
  • SQL Server:微软,只能用在微软平台上;
  • MySQL:瑞典MySQL AB公司开发,属于 Oracle旗下产品,分为社区版和收费版,在国内互联网公司使用广泛。

对数据库的理解

我们通常所说的数据库其实是RDBMS(Relational Database Management System,关系型数据库管理系统),其包括两个部分:

  • 管理员,Manager;
  • 仓库,Database。

Database包括:N张表(Table);

Table包括两个部分:

  • 表结构:定义表的列名和列类型(理解成类);
  • 表记录:一行一行的记录(理解成对象)。

sql概述

SQL:Structured Query Language(结构化查询语言),其实就是定义了操作所有关系型数据库的规则,客户端使用SQL来操作数据库,可以应用到所有关系型数据库中。

SQL语言标准由ISO(国际标准化组织)发布,ISO定义了很多SQL标准(例如SQL99)对RDBMS进行统一的操作,相同的语句可以操作Oracle,MySQL。各个数据库厂商有自己的标准,类似于方言,MySQL中的limit。

SQL语法:

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

经验:通常执行对数据库的“增删改查”,简称C(Create)R(Read)U(Update)D(Delete)。

sql分类

SQL分类

  • DDL(Data Definition Language)数据定义语言
    • 创建、删除、修改库与表结构 => 用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
  • DML(Data Manipulation Language)数据操作语言
    • 用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
  • TPL(Transaction Process Language)事务处理语言:用于对事务进行处理;
  • DQL(Data Query Language)数据查询语言
    • 用来查询数据库中表的记录(数据)。关键字:select, where 等
  • DCL(Data Control Language)数据控制语言(了解)
    • 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等

MySQL支持多种类型,大致可以分为三类:

  • 数值;
  • 字符串(字符)类型;
  • 日期时间。

DML(Data Manipulation Language)数据操作语言:增、删、改表记录。

# 一次插入多条数据
INSERT INTO 表名(列名1, 列名2, ...) VALUES(列值1, 列值2, ...), (列值1, 列值2, ...), (列值1, 列值2, ...);
# 删除id为1的学生
DELETE FROM stu WHERE id=1;
# WHERE条件是可选的, 如果没有条件, 就修改所有记录, 多数时候我们都加上WHERE条件
UPDATE 表名 SET 列名1=列值1, 列名2=列值2, ...[WHERE 条件]

关于条件:

  • 条件必须是一个boolean类型的值或表达式;
  • 运算符:=、!=、<>、>、<、>=、<=、between…and… 、in(…)、is null、not、or、and;
  • 和后面学习的删除数据及DQL中的条件通用。

约束

用于限制加入表的数据的类型和规范,约束是添加在列上的,用来约束列的

约束说明分类
PRIMARY KEY主键约束实体完整性约束
PRIMARY KEY AUTO_INCREMENT主键、自动增长
UNIQUE唯一约束
NOT NULL非空约束域完整性约束
default默认值
FOREIGN KEY外键约束引用完整性约束
FOREIGN KEY ON UPDATE CASCADE外键级联更新
FOREIGN KEY ON DELETE CASCADE外键级联删除

DQL

关系结构数据库是以表格(Table)进行数据存储,表格由“行”和“列”组成。

经验:执行查询语句返回的结果集是一张虚拟表。

在这里插入图片描述

基本查询 接上图:

# 一般查询所有列时很少会有这种情况,但只查询一列(或几列)时,这种可能就大了
SELECT DISTINCT job FROM emp;

分组查询也可以设置条件,分组后的条件使用HAVING, 分组前的条件使用WHERE

# 查询工资大于15000的员工的工种,以及工种的平均工资
SELECT job, AVG(sal) FROM emp WHERE sal>15000 GROUP BY job;

# 查询工资大于15000的员工的工种,以及工种的平均工资,只显示超过两人的工种
SELECT job, AVG(sal) FROM emp WHERE sal>15000 GROUP BY job HAVING COUNT(*)>=2;

TPL

什么是事务

一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

事务要处理的问题,把多个对数据库的操作绑定成一个事务,要么都成功,要么都失败

MySQL中处理事务涉及三个操作:

  • 开启事务
  • 提交事务
  • 回滚
# 1,开启事务
START TRANSACTION;

# 多个SQL操作

# 提交事务
COMMIT;
# 回滚
ROLLBACK;

在执行SQL语句之前,先执行START TRANSACTION,这就开启了一个事务(事务的起点),然后可以去执行多条SQL语句;

后要结束事务,COMMIT表示提交,即事务中的多条SQL语句所做出的影响会持久化到数据库中,或者ROLLBACK,表示回滚,即回滚到事务的起点,之前做的所有操作都被撤消了;

事务原理

数据库会为每一个客户端都维护一个空间独立的缓存区(回滚段),一个事务中所有的增删改语句的执行结果都会缓存在回滚段中,只有当事务中所有SQL语句均正常结束(COMMIT),才会将回滚段中的数据同步到数据库。否则无论因为哪种原因失败,整个事务将回滚(ROLLBACK)。

事务特性【记忆】

原子性(Atomicity):事务中所有操作作为一个整体,是不可再分割的原子单位。事务中所有操作要么全部执行成功,要么全部执行失败,如果操作失败则不能对数据库有任何影响。。

一致性(Consistency):事务执行后,数据库状态与其它业务规则保持一致。如转账业务,无论事务执行成功与否,参与转账的两个账号余额之和应该是不变的。

隔离性(Isolation):隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰。

持久性(Durability):一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。

四大隔离级别

隔离级别脏读不可重复读幻读
读未提交(READ UNCOMMITTED)可能可能可能
读已提交(READ COMMITTED)不可能可能可能
可重复读(REPEATABLE READ)不可能不可能可能
串行化(SERIALIZABLE)不可能不可能不可能

常用函数

在这里插入图片描述

posted @ 2022-04-02 09:45  coderwcb  阅读(32)  评论(0编辑  收藏  举报