数据库基础
✍️ 正文
数据库原理:数据库也是一套系统,类似于操作系统,只是负责的是管理数据。
涉及到权限、增删改查、数据结构等。
基础
SQL语句:
- DDL:操作数据库的
- DML:表的增删改查
- DCL:用户及权限
存储引擎:
- MyISAM:查询速度快,只支持表锁,不支持事务
- InnoDB:整体速度快,支持表锁和行锁
- 关系数据库:用表来存一类数据
数据库设计的三大范式:(漫画数据库)
- 第一范式:原子性,字段不可再分,否则就不是关系数据库
- 第二范式:唯一性,一个表只说明一个事物
- 第三范式:每列都与主键有直接关系,不存在传递依赖
**事务:**整体操作,把多个SQL操作当成一个整体,要么同时成功,要么全部撤销。
- transaction 事务的特点:
- ACID
- 原子性 atomicity:事务要么成功,要么失败,没有中间状态,失败会回滚Rollback
- 一致性 consistency:数据库的完整性没有遭到破坏
- 隔离性 isolation:事务之间是互相隔离的
- 隔离级别:
- read uncommitted读未提交
- read committed读提交
- repeatable read可重复读
- Serializable 串行化
- 持久性 durability:事务操作的结果是不会丢失的
优化:
- 索引
- 索引的原理:B树和B+树
- 索引的类型
- 索引的命中
- 分库分表
- SQL慢查询优化
- 主从
- 读写分离:从库读,主库写
安全性:
- SQL注入攻击
ORM 对象关系映射
Object Relational Mapping
通过它我们可以直接使用Python的类的方式做数据库开发,而不再直接写原生的SQL语句(甚至不需要SQL的基础)。
- SQLAlchemy关系型数据库框架
- Context
- mysqldb 原生语句
- 类库设计
- property装饰器会把函数变为属性,属性即为函数名 password.setter装饰器则为设置属性值
数据的操作,保存,展示
- 数据库,数据的保存
- 数据的逻辑处理
- 数据的展示 templates
- 数据的传输request,response
- 其他
- 配置,各种情景模式下,各种特殊要求下的不同组合命令行参数 config配置文件
- 问题,异常,错误的捕捉,处理,记录
- log 日志文件
数据库优化
- 表结构设计,三范式设计的时候考虑查询,用空间换时间,适当增加冗余字段节省查询开销
- 建索引提升查询速度,但会降低增删改的速度
- 主键 pk
- 唯一 unique
- 索引 index=true联合索引
- sql语句优化
- 使用索引,注意关键字顺序,最左选择
- 不要用select *
- 能使用联合查询,不使用嵌套(子查询)
- 能不使用联合查询,尽量不用联合查询
- 外键,级联 cascade
- 慢查询分析效率低的语录
- 缓存
- 读写分离主从热备份的服务器,可以实现读写分离
- 分库,分表水平分库分表