写在前面
数据库以文本形式存储
将所有要保存的数据,写入文本文件。这个文本文件就是数据库。
数据库原理
二叉搜索树是一种效率非常高的数据结构,他有三个特点:
(1)每个节点最多只有两个子树;
(2)左子树节点值小于父节点值,右字树节点值大于父节点值;
(3)n个节点中找目标值,需要log(n)次比较。
二叉搜索树不适合数据库,因为它的查找效率与层数相关。越处在下层的数据,就越需要多次比较。极端情况下,n个数据需要n次比较才能找到目标值。对于数据库来说,每进入一层就要从磁盘读取一次数据,这非常致命,因为硬盘的读取时间远远大于数据处理时间,数据库读取磁盘的次数越少越好。
B树是二叉树的改进,它的设计思想是,将数据尽量集中在一起,以便一次读取多个数据,减少磁盘操作次数。
B树的三个特点:
(1)一个节点可以有多个值;
(2)除非数据被填满,否则不会增加新的层;
(3)子节点的值与父节点值有严格的对应关系;(父节点有n个值,就有n+1个子节点。
数据库索引
数据库以B树格式存储,只解决了按照“主键”查找数据的问题。如果想查找其他字段,就需要建立索引。
索引就是以某个字段为关键字的B树文件。比如有一张学生表,包含学号、姓名两个字段。可以对姓名建立索引文件,该文件以B树格式对姓名进行存储,每个姓名后面是其在数据库中的存储位置。查找姓名时,先从索引中找到对应第几条记录,然后再从表格中读取。
这种索引查找方法,叫做“索引顺序存取方法”。
【看看大佬】(http://blog.codinglabs.org/articles/theory-of-mysql-index.html)
MySQL数据库事务
是指批量进行一系列数据库操作,只要有一部不成功,整个操作都不成功。所以需要有一个“操作日志”,以便失败时对操作进行回滚。
- 事务的特性:
事务有以下四个标准属性的缩写ACID,通常被称为:
原子性:
确保工作单元内的所有操作都成功完成,否则事务将被中止在故障点,和以前的操作将回滚到以前的状态。
一致性:
确保数据库正确地改变状态后,成功提交的事务。
隔离性:
使事务操作彼此独立的和透明的。
持久性:
确保提交的事务的结果或效果的系统出现故障的情况下仍然存在。
在MySQL中,事务开始使用COMMIT或ROLLBACK语句开始工作和结束。开始和结束语句的SQL命令之间形成了大量的事务。
悲观锁、乐观锁
悲观锁:
悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。
乐观锁:
乐观锁(Optimistic Lock),顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在提交更新的时候会判断一下在此期间别人有没有去更新这个数据。乐观锁适用于读多写少的应用场景,这样可以提高吞吐量。
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。
参考
http://blog.codinglabs.org/articles/theory-of-mysql-index.html
本文链接: http://askunix.github.io/2018/09/01/database/
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,转载请注明出处!
