- 为什么使用关系型数据库? 
 ~ 持久化 / 管理数据(方便查询)
 ~ 一致性 ---> 事务 ---> 锁
 并发数据访问 ---> 五类问题
 - 第一类丢失更新
 - 第二类丢失更新
 - 脏读(读脏数据):一个事务读到另一个事务还没有提交的数据。
 - 不可重复读:一个事务读取之前获取的数据,发现原来的数据已经被另一个已提交的事务修改。
 - 幻读:一个事务读取数据,读到了另一个已提交事务插入的新数据。
 锁:共享锁、排他锁、表锁、行锁
 - MyISAM ---> 读数据
 - InnoDB ---> 行锁,事务 ---> 互联网高并发
 - Memory
 设置合理的事务隔离级别让MySQL自动选择合适的锁
 - 查看事务隔离级别:select @@tx_isolation;
 - 修改事务隔离级别:set session transaction isolation level read committed;
 ~ READ UNCOMMITTED --> 脏读
 ~ READ COMMITTED --> 不可重复读
 ~ REPEATABLE READ --> 幻读
 ~ SERIALIZABLE --> 没任何毛病(性能最差)
 事务隔离级别越高,数据越安全,但是性能也越差
 ~ 完整性
 - 实体完整性(每个实体都是独一无二的,没有冗余)- 主键/唯一索引
 - 参照完整性(父表没有的记录子表也不能出现)- 外键
 ~ 注意:实际项目中出于性能的考虑会去掉外键约束
 - 域完整性(录入的数据都是有效的)
 ~ 数据类型和数据长度
 ~ 非空约束
 ~ 默认值约束
 ~ 检查约束
- 范式理论(Normal Form)---> 设计表 
 ~ 数据库表的规范程度
 - 1NF:字段不可分割
 - 2NF:非主键字段都依赖主键
 - 3NF:消除传递依赖
 ~ 实际项目中可能为了提升性能使用反范式设计
2020-06-11 数据库基础
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
 平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。