当前位置:首页 » 操作系统 » 数据库数据的一致性

数据库数据的一致性

发布时间: 2025-01-11 17:30:45

A. 数据库系统中 数据的一致性指的是什么

同步更新。

简单说来就是一条column的数据在多个表中保持同步更新, 一般用foreign key实现mapping

比如两张表table1,table2

其中table1的uid column是primary key,table2的uid column是foreign key,

则当修改table1的uid column的一row时,table2的对应row也会自动更新。

(1)数据库数据的一致性扩展阅读:

常用的一致性模型有:

1、严格一致性(linearizability, strict/atomic Consistency):读出的数据始终为最近写入的数据。这种一致性只有全局时钟存在时才有可能,在分布式网络环境不可能实现。

2、顺序一致性(sequential consistency):所有使用者以同样的顺序看到对同一数据的操作,但是该顺序不一定是实时的,等。

B. 如何理解数据库的内部一致性和外部一致性

1. 定义:数据库一致性是指事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态。每一次数据变更都会导致数据库状态的迁移。如果数据库的初始状态是C0,第一次事务T1的提交将导致系统生成一个SYSTEM CHANGE NUMBER(SCN),这是数据库状态从C0转变成C1。执行第二个事务T2时,数据库状态从T1变成T2,以此类推,执行第Tn次事务时,数据库状态由C(n-1)变成Cn。一致性的定义主要涉及两个方面,即一致读和一致写。
2. 一致写:事务执行的数据变更只能基于上一个一致的状态,并且只能体现在一个状态中。T(n)的变更结果只能基于C(n-1),C(n-2), ...C(1)状态,且只能体现在C(n)状态中。也就是说,一个状态只能有一个事务变更数据,不允许有2个或者2个以上事务在一个状态中变更数据。具体来说,一致写基于哪个状态,需要判断T(n)事务是否与T(n-1),T(n-2),...T(1)有依赖关系。
3. 一致读:事务读取数据只能从一个状态中读取,不能从2个或者2个以上状态中读取。也就是说,T(n)只能从C(n-1),C(n-2)... C(1)中的一个状态读取数据,不能一部分数据读取自C(n-1),而另一部分数据读取自C(n-2)。
4. 事实举例:假设定义100个事务T(1)...T(100)实现相同的逻辑 update table set i=i+1,i的初始值是0,那么并发执行这100个事务之后i的值是多少?可能很容易想到是100。然而,如何从一致性角度去理解呢?数据库可能会随机调度T(50)执行,此时数据库状态是C(0),而其他事务都依赖于T(50),根据写一致性原理,其他事务必须等到T(50)执行完毕后数据库状态变为C(1)才能执行。因此,数据库利用锁机制阻塞其他事务的执行,直到T(50)执行完毕,数据库状态从C(0)迁移到C(1)。然后,数据库唤醒其他事务,随机调度到T(89)执行,以此类推直到所有事务调度执行完毕,数据库状态最终变为C(100)。
5. 事实举例:还是上面的例子,假设T(1)...T(100)顺序执行,在不同的时机执行select i from table,我们看到i的值是什么?1. 在T(1)的执行过程中,数据库状态尚未迁移,读到的i=0。2. 在T(1)执行完毕,T(2)的执行过程中,数据库状态迁移至C(1),读到的i=1。

热点内容
压缩气翻译 发布:2025-01-11 19:42:51 浏览:744
安卓如何正确卡枪 发布:2025-01-11 19:29:57 浏览:750
米家小相机存储卡 发布:2025-01-11 19:22:30 浏览:699
我的世界如何输地图密码 发布:2025-01-11 19:13:21 浏览:226
php表单注册 发布:2025-01-11 18:43:02 浏览:162
虚拟存储功能 发布:2025-01-11 18:43:01 浏览:889
ninjaandroid 发布:2025-01-11 18:26:10 浏览:527
华为的编译器可以用几个软件 发布:2025-01-11 18:18:18 浏览:620
python中的turtle 发布:2025-01-11 18:06:08 浏览:399
罗布乐思账号密码手机号多少 发布:2025-01-11 18:00:55 浏览:403