2020-06-11 数据库基础

  1. 为什么使用关系型数据库?
    ~ 持久化 / 管理数据(方便查询)
    ~ 一致性 ---> 事务 ---> 锁
    并发数据访问 ---> 五类问题
    - 第一类丢失更新
    - 第二类丢失更新
    - 脏读(读脏数据):一个事务读到另一个事务还没有提交的数据。
    - 不可重复读:一个事务读取之前获取的数据,发现原来的数据已经被另一个已提交的事务修改。
    - 幻读:一个事务读取数据,读到了另一个已提交事务插入的新数据。
    锁:共享锁、排他锁、表锁、行锁
    - MyISAM ---> 读数据
    - InnoDB ---> 行锁,事务 ---> 互联网高并发
    - Memory
    设置合理的事务隔离级别让MySQL自动选择合适的锁
    - 查看事务隔离级别:select @@tx_isolation;
    - 修改事务隔离级别:set session transaction isolation level read committed;
    ~ READ UNCOMMITTED --> 脏读
    ~ READ COMMITTED --> 不可重复读
    ~ REPEATABLE READ --> 幻读
    ~ SERIALIZABLE --> 没任何毛病(性能最差)
    事务隔离级别越高,数据越安全,但是性能也越差
    ~ 完整性
    - 实体完整性(每个实体都是独一无二的,没有冗余)- 主键/唯一索引
    - 参照完整性(父表没有的记录子表也不能出现)- 外键
    ~ 注意:实际项目中出于性能的考虑会去掉外键约束
    - 域完整性(录入的数据都是有效的)
    ~ 数据类型和数据长度
    ~ 非空约束
    ~ 默认值约束
    ~ 检查约束

  2. 范式理论(Normal Form)---> 设计表
    ~ 数据库表的规范程度
    - 1NF:字段不可分割
    - 2NF:非主键字段都依赖主键
    - 3NF:消除传递依赖
    ~ 实际项目中可能为了提升性能使用反范式设计

你可能感兴趣的:(2020-06-11 数据库基础)