1、为什么使用关系型数据库?
- 持久化/管理数据(方便查询)
- 一致性--->事务---->锁
- 并发数据访问---->五类问题
- 第一类丢失更新:事务A撤销时,把已经提交的事务B的更新数据覆盖了
- 第二类丢失更新:事务A覆盖事务B已经提交的数据,造成事务B所做的操作丢失
- 脏读:A事务读到了B事务还未提交的数据
- 不可重复读:A事务重新读取前面取到的数据,读到了B事务已经提交后的修改过的数据
- 幻读:A事务读取数据,读到了B事务已提交事务后插入的新数据
2、锁
共享锁、排他锁、表锁、行锁
- MyISAM---->读数据
- InnoDB---->行锁、事务----->互联网高并发
- Memory
设置事务隔离级别让MySQL自动选择合适的锁
修改事务隔离级别:select session transaction isolation level read committed;读提交
查询事务隔离级别:select @@tx_isolation;
级别分类
- READ UNCOMMITTED -->脏读
- READ COMMITTED —>不可重复读
- REPEATABLE READ —>幻读
- SERIALIZABLE —>无任何问题
事务隔离级别越高,性能越差,一致性越高,数据越安全
3、数据库完整性
- 实体完整性(每个实体都是独一无二的,没有冗余)
- 域完整性(录入的数据都是有效的)
- 数据类型和数据长度
- 非空约束
- 默认值约束
- 检查约束(设定条件)
- 参照完整性(父表没有的记录子表也不能出现)-外键
- 注意:实际项目中出于性能的考虑会去掉外键约束
范式理论(Normal Form)—>设计表
- 数据库表的规范程度
- 1NF:字段不可分割
- 2NF:非主键字段都依赖主键
- 3NF:消除传递依赖
- 实际项目中可能为了提升性能反范式设计
SOA —>Service-Oriented Architecture
- SasS:Software as Service
- PasS:Platform as Service
- IasS:Infrastructure as Service
如何把软件做成服务----->跨(编程)语言跨(操作系统)平台
- RMI / RPC:远程方法调用(调用过程调用)-nameko(三方库)
- WebService —>SOAP(简单对象访问协议)
- RESTful ----> HTTP ---->JSON
认证
CBV加装饰器;FBV写自定义类=xxx
待更新~