本文主要介绍“数据库原理的知识点有哪些” 。在日常操作中,相信很多人对数据库原理知识点的问题有所怀疑 。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮助大家解答“数据库原理有哪些知识点”的疑惑 。接下来,请和边肖一起学习!1.交易 。(1)定义 。事务是指满足ACID特征的一组操作 。事务可以通过提交来提交,也可以通过回滚来回滚 。(2)特点 。A.原子数事务被视为最小的不可分割单元,事务的所有操作要么提交成功,要么失败后回滚 。回滚可以通过使用回滚日志来实现,该日志记录了事务执行的修改操作,这些修改操作可以在回滚过程中反向执行 。B.一致性事务执行前后,数据库处于一致状态 。在一致状态下,所有事务读取相同的数据 。对于关系数据库,要求更新后的数据能够被后续的访问看到,一致性很强 。如果能容忍部分或全部后续访问不可用,则为弱一致性* *;如果更新后的数据需要在一段时间后才能访问,这就是最终的一致性 。C.隔离 。一家公司所做的更改在最终提交之前对其他交易是不可见的 。一旦事务被提交,其修改将始终保存在数据库中 。即使系统崩溃,事务执行的结果也不会丢失 。2.并发一致性 。(1)更新丢失 。T1和T2两个交易修改相同的数据,T1先修改,T2后修改,T2的修改覆盖T1的修改 。下面是一个大家都懂的飞机订票系统的例子:售票处A(交易A)读出某航班的机票余额A,设置A=16售票处b(交易b)读出同一航班的机票余额a,也是16;售票点售票并修改余额警报;A-1 .所以a是15,写一个回数据库;b、售票点也卖票,修改余额AlarrA-1 .所以a是15,写一个回数据库 。结果卖出了两张票,数据库里的票余额只减少了1 。(2)不要反复阅读 。T2读取数据,T1修改数据 。如果T2再次读取该数据,读取结果与第一次读取不同 。具体来说,当前事务已经读取了一次数据,然后再次读取的数据是其他事务成功修改的数据,导致两次读取的数据不匹配 。(3)幻影阅读 。T1读取一定范围内的数据,T2在该范围内插入新数据,T1再次读取该范围内的数据,读取结果与第一次读取结果不同 。或者更一般地说,交易 。lang= EN-US A首先根据条件索引得到N条数据,然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读 。换句话说,当前事务读第一次取到的数据比后来读取到数据条目少 。
3、封锁
(1)封锁粒度
MySQL 中提供了两种封锁粒度:行级锁以及表级锁 。应该尽量只锁定需要修改的那部分数据,而不是所有的资源 。锁定的数据量越少,发生锁争用的可能就越小,系统的并发程度就越高 。但是加锁需要消耗资源,锁的各种操作(包括获取锁、释放锁、以及检查锁状态)都会增加系统开销 。因此封锁粒度越小,系统开销就越大 。在选择封锁粒度时,需要在锁开销和并发程度之间做一个权衡 。
(2)封锁类型
A.读写锁
排它锁简写为 X 锁,又称写锁;共享锁简写为 S 锁,又称读锁 。有以下两个规定:一个事务对数据对象 A 加了 X 锁,就可以对 A 进行读取和更新 。加锁期间其它事务不能对 A 加任何锁 。一个事务对数据对象 A 加了 S 锁,可以对 A 进行读取操作,但是不能进行更新操作 。加锁期间其它事务能对 A 加 S 锁,但是不能加 X 锁 。
B. 意向锁
使用意向锁(Intention Locks)可以更容易地支持多粒度封锁 。在存在行级锁和表级锁的情况下,事务 T 想要对表 A 加 X 锁,就需要先检测是否有其它事务对表 A 或者表 A 中的任意一行加了锁,那么就需要对表 A 的每一行都检测一次,这是非常耗时的 。意向锁在原来的 X/S 锁之上引入了 IX/IS,IX/IS 都是表锁,用来表示一个事务想要在表中的某个数据行上加 X 锁或 S 锁 。有以下两个规定:一个事务在获得某个数据行对象的 S 锁之前,必须先获得表的 IS 锁或者更强的锁;一个事务在获得某个数据行对象的 X 锁之前,必须先获得表的 IX 锁 。
推荐阅读
- 怎么用filter和transform-style属性创建视觉3D特效
- 榨芹菜汁用不用煮熟
- 适用于Python的编写工具有哪些
- 恋人未满是什么意思
- 家里没牙膏了怎么应急刷牙
- 喷壶怎么用,酒精喷壶怎么用
- 怎么实现在Python退出时强制运行一段代码
- 糯米泡多久可以蒸,糯米要泡到什么样才算泡好可以蒸
- Android基础知识点有哪些
