为什么使用关系型数据库?
~ 持久化 / 管理数据(方便查询)
~ 一致性 ---> 事务 ---> 锁
并发数据访问 ---> 五类问题
- 第一类丢失更新
- 第二类丢失更新
- 脏读(读脏数据):一个事务读到另一个事务还没有提交的数据。
- 不可重复读:一个事务读取之前获取的数据,发现原来的数据已经被另一个已提交的事务修改。
- 幻读:一个事务读取数据,读到了另一个已提交事务插入的新数据。
锁:共享锁、排他锁、表锁、行锁
- 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 数据库基础
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...