一、概述
1、数据库基本概念
(1)数据 data
(2)数据库 DB:以一定格式存放、能够实现多个用户共享、与应用程序彼此独立的数据集合。
(3)数据库管理系统 DBMS:用来定义和管理数据的软件。
(4)数据库应用程序 DBAS:在数据库管理系统基础上,使用数据库管理系统的语法,开发的直接面对最终用户的应用程序。
(5)数据库管理员 DBA:对数据库管理系统进行操作的人员,其主要负责数据库的运营和维护。
(6)最终用户 user:数据库应用程序的使用者。
(7)数据库系统 DBS:一般是由数据库、数据库管理系统、数据库应用程序、数据库管理员和最终用户构成。
2、数据库类型
根据数据的组织结构:
- 网状数据库
- 层次数据库
- 关系型数据库:将复杂的数据结构用较为简单的二元关系(二维表)来表示。
- 非关系型数据库 NOSQL(Not Only SQL):NOSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
二、SQL语言
1、概述
数据库管理人员(DBA)通过数据库管理系统(DBMS)可以对数据库(DB)中的数据进行操作,使用到SQL语言。
SQL(Structured Query Language)是结构化查询语言的简称,它是一种数据库查询和程序设计语言,同时也是目前使用最广泛的关系型数据库操作语言。在数据库管理系统中,使用SQL语言来实现数据的存取、查询、更新等功能。SQL是一种非过程化语言,只需提出“做什么”,而不需要指明“怎么做”。
2、五部分
(1)数据查询语言 DQL:
基本结构是使用SELECT子句,FROM子句和WHERE子句的组合来查询一条或多条数据。
- 单表查询:where子句(查询符合条件的部分记录);函数;group by分组->having分组后筛选
- 多表查询:连接(交叉、自然、内连接、外连接)
- 子查询
(2)数据操作语言 DML
数据库中的数据进行增加、修改和删除的操作。
(3)数据定义语言 DDL
主要针对数据库对象(数据库、表、索引、视图、触发器、存储过程)的创建、修改和删除操作。
① 数据库对象
a. 数据库
create database xxx
drop database xxx
b. 表(二维表,由“行”【记录】、“列”【字段、属性】组成)
create table xxx(属性xxx 类型)
drop table xxx
alter table xxx
- 完整性约束
约束条件 | 约束描述 |
---|---|
PRIMARY KEY | 主键约束,约束字段的值可唯一地标识对应的记录 |
NOT NULL | 非空约束,约束字段的值不能为空 |
UNIQUE | 唯一约束,约束字段的值是唯一的 |
CHECK | 检查约束,限制某个字段的取值范围 |
DEFAULT | 默认值约束,约束字段的默认值 |
AUTO_INCREMENT | 自动增加约束,约束字段的值自动递增 |
FOREIGN KEY | 外键约束,约束表与表之间的关系 |
CHECK | MySQL8中提供支持 |
c. 视图
一个从单张或多张基础数据表或其他视图中构建出来的虚拟表。
数据库中只是存放视图的定义(动态检索数据的查询语句,而并不存放视图中的数据,这些数据依旧存放于构建视图的基础表中,只有当用户使用视图时才去数据库请求相对应的数据,即视图中的数据是在引用视图时动态生成的)。
因此,视图中的数据依赖于构建视图的基础表,如果基本表中的数据发生了变化,视图中相应的数据也会跟着改变。【视图本质上就是:一个查询语句,是一个虚拟的表,不存在的表,你查看视图,其实就是查看视图对应的sql语句】
d. 存储过程
数据库中保存(Stored)的一系列SQL命令(Procedure)的集合。也可以将其看作相互之间有关系的SQL命令组织在一起形成的一个小程序。
(4)数据控制语言 DCL:授予或回收访问数据库的权限。
(5)事务控制语言 TCL:数据库的事务管理。
事务:用来维护数据库完整性的,它能够保证一系列的MySQL操作要么全部执行,要么全不执行。
特性:
- 原子性:事务中的所有操作可以看做一个原子,事务是应用中不可再分的最小的逻辑执行体。
- 一致性:事务执行的结果必须使数据库从一个一致性状态,变到另一个一致性状态。
- 隔离性:各个事务的执行互不干扰。
- 持久性:事务一旦提交,对数据所做的任何改变,都要记录到永久存储器中。
并发问题:
- 脏读:当一个事务正在访问数据并且对数据进行了修改,而这种*修改还没有提交到数据库中*,这时另外一个事务也访问了这个数据,然后*使用了这个数据*。
- 不可重复读【只需锁住满足条件的行】:在一个事务内多次读同一数据。在这个事务还没有结束时,另一个事务也访问该数据。那么,在第一个事务中的两次读数据之间,由于*第二个事务的修改导致第一个事务两次读取的数据可能不太一样*。这就发生了在一个事务内两次读到的数据是不一样的情况。
- 幻读【锁表 】 :发生在一个事务(T1)读取了几行数据,接着另一个并发事务(T2)*插入了一些数据*时。在随后的查询中,第一个事务(T1)就会发现*多了一些原本不存在的记录*,就好像发生了幻觉一样。
隔离级别:决定如何控制并发用户读写数据的操作。
MySQL中提供了四种隔离级别,从低到高依次为READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ以及SERIALIZABLE,隔离级别越低,越能支持高并发的数据库操作。
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
READ | UNCOMMITTED | √ | √ |
READ COMMITTED | × | √ | √ |
REPEATABLE READ | × | × | √ |
SERIALIZABLE | × | × | × |
PS:√ 代表会出现问题,×代表不会出现问题 = 解决问题