目录
1.数据库管理系统(DBMS)
是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过dbms访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。
2.数据库
长期存放在计算机内,有组织可以共享的大量数据的集合
1) 分类
关系型数据库:Oracle,SQL Server,MySQL
非关系型数据库:hbase
3. MySQL
1)是一个数据库管理系统
2)特点:免费开源,关系型,轻量级,使用方便
3)安装:尽量按照文档步骤安装
4.数据类型
1)数值类型
tinyint | 非常小的数据 | 1字节 |
smallint | 较小的数据 | 2字节 |
mediumint | 中等大小的数据 | 3字节 |
int | 标准整数 | 4字节 |
bigint | 较大的整数 | 8字节 |
float | 单精度浮点数 | 4字节 |
double | 双精度浮点数 | 8字节 |
decimal | 字符串形式的浮点数 | M+2个字节 |
2)字符串类型
字符串类型 | 说明 | 长度 |
---|---|---|
char[(M)] | 定长字符串 | M字节 |
varchar | 可变字符串 | 可变长度 |
tinytext | 微型文本串 | 0~2的8–1次方 字节 |
text | 文本串 | 0~2的16–1次方 字节 |
3)时间类型
日期类型 | 格式 |
---|---|
date | YYYY-MM-DD,日期格式 |
time | hh:mm:ss |
datetime | YY-MM-DD hh:mm:ss |
timestamp | YYYYMMDDHHMMSS,时间戳 |
year | YYYY格式的年份 |
5.sql的语言
1)DDL(数据定义语言)
对数据库和表进行增删改查
增:create 删:drop 改:alter 查:show
2)DML(数据操作语言)
对具体表内的数据进行增删改操作
增:insert 删:delete 改:update
3)DQL(数据查询语言)
对表中数据进行查询操作
查:select
4)DCL(数据控制语言)
管理数据库的语言,包括管理权限及事务操作等
权限:GRANT,提交:COMMIT,回滚:ROLLBACK
6.DQL
a.普通查询
b.条件查询 where having
c.模糊查询 like %(0-多个任意字符) _(1个字符)
d.连接查询 join 表 on 连接条件
inner join,left outer join,right outer join
e.子查询(嵌套查询)
7.sql的加载顺序
关键词:
select xxx 可以存在聚合函数
from xxx
join xxx on xxx
where 不包含聚合函数的过滤条件
group by xxxxx,xxx
having 包含聚合函数的过滤条件
order by xxx (ASC/DESC)
LIMIT
顺序:
from - join on - where - group by
- hiving - select - order by limit
8.函数
a.普通函数:ifnull,floor,rand,abs,ceiling,cast...
b.聚合函数:sum,avg,count,max,min....
c.开窗函数:MySQL 8版本支持开窗函数
9.数据库的约束
创建数据库表的时候不能随意创建,必须遵守默认规定
名称 | 关键字 | 说明 |
---|---|---|
非空约束 | not null | 字段不允许为空 |
唯一约束 | UNIQUE KEY(UK) | 当前字段值不能重复 |
主键约束 | primary key | 当前表的主键,必须是唯一且非空的 |
复合主键 | primary key | 使用两个字段同时作为主键,放在一起唯一才是唯一 |
外键约束 | FOREIGN KEY | 保证数据的一致性和完整性 |
默认值约束 | DEFAULT | 此子段不给值的时候使用的默认值 |
自动增长 | AUTO_INCREMENT | 设置该列为自增字段 默认每条自增1 通常用于设置主键 |
检查约束 | mysql不支持 |
10.存储引擎
1)存储数据的核心的规则
a.同一个数据库,不同的表,可以使用不同的存储引擎
b. 建表的时候可以指定存储引擎
2)常用的存储引擎:InnoDB(默认),Memory(内存存储,不涉及磁盘(优点:速度快,缺点:不安全)),MyISAM
3)不同的存储引擎有不同的存储规则
5)适用场合
a.使用MyISAM: 不需事务,空间小,以查询访问为主
b.使用InnoDB: 多删除、更新操作,安全性高,事务处理及并发控制
4)存储索引之间的区别
名称 | InnoDB(64G) | MyISAM(256G) |
---|---|---|
事务处理 | 支持 | 不支持 |
数据行锁定 | 支持 | 不支持 |
外键约束 | 支持 | 不支持 |
全文索引 | 不支持 | 支持 |
表空间大小 | 较大,约2倍 | 较小 |
11.事务
1)事务:事务是一个或多个事件(SQL)的集合,要么都做(执行)要么都不做(执行)
2) mysql中的事务是自动提交,oracle中是手动提交
3)事务的sql
事务 | sql |
---|---|
开始事务 | begin / start transaction |
提交事务 | commint |
回滚(撤销)事务 | rollback |
关闭/开启自动提交状态 (值为0:关闭自动提交 | 值为1:开启自动提交) | set autocommint=0|1 |
设置检查点 | savepoint x |
4)***事务的ACID特性
a.原子性(A):事务被认定为一个不可分割的单元
b.一致性(C):状态保持一致。体现在外键表和主表的关系中
c.持久性(I):事务commit之后是不可以回滚的,永久有效
d.隔离性(D):不同事务之间不会互相干扰
5)***事务的隔离级别
只有支持事务的存储引擎才可以定义隔离级别
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交(read-uncommitted)也叫脏读 | 是 | 是 | 是 |
不可重复读(read-committed)也叫读已提交 | 否 | 是 | 是 |
可重复读(repeatable-read)默认级别 | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
6)事务的并发问题
(1)多个用户同时操作事务,可能出现的问题
a.丢失更新:不同事务对同一个数据进行更新,后提交的数据覆盖了之前提交的数据
b.脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据 ( 隔离级别read-uncommitted )
c.不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。( 隔离级别 read-committed 解决了脏读 )
d.幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表
(2) 锁:解决并发产生的问题
a.不同的存储引擎支持不同的级别锁
行锁 | 表锁 | 页锁 | |
---|---|---|---|
InnoDB | √ | √ | |
MyISAM | √ | ||
MEMORY | √ | ||
BDB | √ | √ |
开销、加锁速度、死锁、粒度、并发性能
表锁:开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低
行锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高
页锁:开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般
b.乐观锁和悲观锁
乐观锁:先进性业务操作,操作完,获取锁
悲观锁:先获取锁,在进行操作
12. 视图 view
把麻烦的需要多次操作的完整语句用视图进行表示
1)虚拟表(临时表),通常是作为执行查询的结果而创建的,便于快速检索数据
2)创建视图:CREATE VIEW
3)表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上
4)常用索引:普通索引、唯一索引、主键索引、复合索引、全文索引、 空间索引
13.存储过程
用sql编程
14.索引
1)提高检索速度,改善数据库性能
2)分类:普通索引、唯一索引、主键索引、复合索引、复合索引、空间索引