《数据库》小结03
一、乐观锁和悲观锁
资源并发锁
1.乐观锁:
- 操作时不上锁,适用于多读模式。
- 乐观锁在不发生取锁失败的情况下开销比悲观锁小,但是一旦发生失败回滚开销则比较大,也可能造成脏读。
- 乐观锁机制避免了长事务中的数据库加锁开销,大大提升了大并发量下的系统整体性能表现。
2.悲观锁:
- 操作时上锁。
- 提供安全保障,但效率不高,增加死锁机会,增加系统负载,降低并行性。
二、清理binlog日志两种方法
- MySQL中的binlog日志记录了数据库中数据的变动,便于对数据的基于时间点和基于位置的恢复,但是binlog也会日渐增大,占用很大的磁盘空间。
- 1.手动删除
- 2.通过设置binlog过期的时间,使系统自动删除binlog文件
三、数据库常用引擎
1.InnoDB: 支持事务处理,支持外键,支持崩溃修复能力和并发控制。
- 如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。
- 如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)
- B+树索引
2.MyISAM: 插入数据快,空间和内存使用比较低。
- 如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。
- 如果应用的完整性、并发性要求比较低,也可以使用。
- B+树索引
3.MEMORY: 所有的数据都在内存中,数据的处理速度快,但是安全性不高。
- 如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。
同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。
四、redis和mysql的区别
- mysql是关系型数据库,redis是缓存数据库。
- mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢。
- redis用于存储使用较为频繁的数据到缓存中,读取速度快。redis是key-value的数据结构,每条数据都是一个键值对,键的类型是字符串,且键不能重复,值的类型有字符串string、哈希hash、列表list、集合set和有序集合zset。
- mysql和redis因为需求的不同,一般都是配合使用。
五、数据库三大范式和五大约束
1)三大范式
- 1.第一范式:每列都是不可拆分的最小单元。
- 2.第二范式:满足1NF后,每列都依赖于主键,每个表只描述一件事情。
- 3.第三范式:满足2NF后,每列都与主键直接相关。利用外键做表的关联,一张表只能包含另一张表的主键。
2)五大约束
- 1.主键约束【主键默认非空和唯一,自动增长的一定是主键,主键不一定需要自动增长】
- 2.唯一性约束
- 3.默认值约束
- 4.非空约束
- 5.外键约束