为什么使用关系型数据库?
~ 持久化 / 管理数据(方便查询)
~ 一致性 ---> 事务 ---> 锁
并发数据访问 ---> 五类问题
- 第一类丢失更新
- 第二类丢失更新
- 脏读(读脏数据):一个事务读到另一个事务还没有提交的数据。
- 不可重复读:一个事务读取之前获取的数据,发现原来的数据已经被另一个已提交的事务修改。
- 幻读:一个事务读取数据,读到了另一个已提交事务插入的新数据。
锁:共享锁、排他锁、表锁、行锁
- 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 数据库基础
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。