dbms如何保证我们定义的check \ _comstraint在提交后始终为true?
我的意思是他们可能会使用特殊技术,因为只是在提交之前执行检查,就像我们可以做的那样,因为多个事务同时进行而无法正常工作?
不管有多少事务并行运行,Acid属性是否保证db状态始终保持一致?
由于
答案 0 :(得分:0)
不同的数据库使用不同的技术,但基本上,所有最终 锁定 的东西都可以确保无法更改的内容以确保保留CONSTRAINT
并未实际更改。
SQL上下文中的数据库锁是什么?提供示例和解释。
数据库锁用于“锁定”数据库中的某些数据,以便只有一个数据库用户/会话可以更新该特定数据。因此,存在数据库锁以防止两个或更多数据库用户在相同的确切时间更新相同的确切数据。当数据被锁定时,这意味着另一个数据库会话无法更新该数据,直到锁被释放(解锁数据并允许其他数据库用户更新该数据。锁通常由ROLLBACK或COMMIT SQL语句释放。
这意味着如果您INSERT
表a
中有一行FOREIGN KEY
约束到表b
,表b
中的相应行将会{ 锁定直到您的交易结束,这样在完成您的交易之前,它不能被另一个并发交易删除。
多版本并发控制数据库可能会使用其他一些不同的技术;但他们的原则基于同样的原则。