1.存储引擎
(1)mysql默认存储引擎是InnoDB,字符集UTF-8,我们建表的时候可以指定存储引擎,也可以指定字符集
(2)mysql有多种存储引擎,不同的存储引擎有不同的存储方式,每个存储引擎有自己的优缺点,选择最合适的存储引擎。
(3)mysql> show engines \G mysql8.0存储引擎有9个,这里主要说三个常见存储引擎。
*************************** 1. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
*************** 6. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 7. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
(4)Engine: MyISAM
- 不支持事务
- mysql最常用的存储引擎,但不是默认的
- 三个文件保存一张表,表结构文件,表数据文件,表索引文件
- 优点:可被转换为压缩,只读表节省空间,提高检索效率
(5)InnoDB
- 支持事务,行级锁,外键等。这种存储引擎最安全
- mysql服务器崩溃后,自动回复机制
- 级联删除,更新。
(6)MEMORY
- 不支持事务
- 数据容易丢失,数据和索引都存储在内存当中
- 查询速度最快
2.事务
(1)什么是事务?
一个事务是一个完整的业务逻辑单元,不可再分。要么都成功要么都失败,不能一个成功一个失败,例如银行转账
(2)insert,delete,update和事务相关的语句。
(3)事务的存在是为了保证数据的完整性和安全性
(4)假设业务只使用了1条DML语句,还需要事务吗?
不需要。但是实际情况中,通常一个事儿需要多条DML语句共同完成。
(5)事务的特性
ACID
- A:原子性:事务是最小的工作单元,不可再分
- C:一致性:事务必须保证多条DML语句同时成功或者失败
- I: 隔离性:事务A与事务B之间具有隔离
- D:持久性:最终数据必须持久到硬盘文件中,事务才算成功结束。
3.索引
(1)什么是索引?有什么用
1.索引就相当于一本书的目录,通过目录可以快速查找对应的资源
2.在数据库方面,查询一张表有两种检索方式
- 全表扫描
- 根据索引检索
3.索引为什么能够提高检索效率呢?
缩小了扫描的范围
4.索引虽然可以提高检索效率,但不能随意的添加索引,因为索引是数据库中的对象,需要数据库不断的维护。
比如:表中的数据经常的被修改,索引就需要重新排序,是由维护成本的。
(2)怎么创建索引对象?
create index 索引名 on 表名(字段名);
(3)什么时候考虑给字段添加索引?
- 数据量庞大
- 该字段很少的DML操作
- 经常性的根据某个字段查询
(4)主键和具有unique约束的字段自动添加索引
(5)实现原理 B+Tree
4.数据库设计三范式
设计表的依据,按照这个三范式设计的表不会出现数据冗余
第一范式:任何一张表都应该有主键,并且每个字段原子性不可再分
第二范式:所有非主键字段必须完全依赖与主键(复合主键,不满足)
多对多三张表,关系表两外键
第三范式 所有非主键字段直接依赖主键,不能产生传替依赖
一对多,两张表,多的表加外键