mysql重点知识提取
完整版本:https://coderwcb.blog.csdn.net/article/details/121047560
概念
数据库就是用来存储和管理数据的仓库。
通过之前的学习,我们能够使用以下两种方式进行数据存储:
- 使用变量、对象、数组、集合存储数据,数据保存在内存(RAM)中;
- 使用文件(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) | 不可能 | 不可能 | 不可能 |