栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MVCC数据库在交易中是否看到插入的行?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MVCC数据库在交易中是否看到插入的行?

答案确实取决于服务器的实现以及唯一约束是否标记为可延迟。

我没有针对其他数据库进行过测试,但是在PostgreSQL(作为最著名的开源MVCC数据库之一)中,在我的测试中,复制设置T2失败

INSERT
。但是,T2无法使用来查看T1所做的任何更改
SELECt

我几乎同时在2个独立的SQL连接中执行了以下语句:

BEGIN;SELECT * FROM names;SELECT pg_sleep(10);INSERT INTO names values('john');SELECT pg_sleep(10);COMMIT;

一个成功,但是另一个失败在10秒后,具有:

ERROR:  duplicate key value violates unique constraint "names_pkey"DETAIL:  Key (name)=(john) already exists.

这是有道理的,因为文档说:

如果尚未提交的事务已插入有冲突的行,则可能的插入程序必须等待以查看该事务是否已提交。如果回滚,则没有冲突。如果提交但未再次删除冲突的行,则表示存在唯一性冲突。

但是,如果将唯一性约束标记为可延迟,则将在COMMIT时检查唯一性:

如果唯一性约束是可延迟的,那么还会有额外的复杂性:我们需要能够为新行插入索引条目,但是将任何违反唯一性的错误推迟到语句结束时或更晚。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/647492.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号