gpb*_*lio 1 postgresql sequelize.js
我正在学习Sequelize和模型的外键,但是我不明白可延期用途的目的是什么
它将创建一个外键来检查约束
我不明白这里的约束(局限性)是什么。我应该定义它吗?我已经看过官方文档中的代码,但这无济于事,无法理解其用法。如果有人帮助我理解,将不胜感激。
该文档提到:
与可延期约束有关的属性的集合。它可用于使外键约束可推迟,并在事务中设置约束。仅在PostgreSQL中支持。
因此,这就是您向Google寻求postgres foreign key deferrable类似服务的提示。在Postgres的文档说:
SET CONSTRAINTS设置当前事务中的约束检查行为。在每个语句的末尾检查IMMEDIATE约束。在提交事务之前,不检查DEFERRED约束。每个约束都有其自己的立即或延迟模式。
创建后,将为约束提供以下三个特征之一:可初始延迟,可立即初始延迟或不可延迟。第三类始终为IMMEDIATE,不受SET CONSTRAINTS命令的影响。前两个类以指示的模式启动每个事务,但是可以通过SET CONSTRAINTS在事务内更改其行为。
解压缩:可延迟意味着您可以“延迟”对外键约束的检查,直到事务结束。(顺便说一句,事务基本上是“查询组”,要么全部成功,要么,如果其中一个失败,则所有其他查询也都回滚。)
让我们举一个人为的例子:假设您有一个blogs表,该表具有指向categories表的外键。当您插入新博客文章时,链接到的类别必须存在-否则blogs to categories外键约束将失败。但是...如果我们使用延迟功能,那么我们可以执行以下操作(以伪代码):
1. Being a transaction
2. Tell postgres to use deferred foreign key constraints for this transaction
3. Insert a blog that links to the "Hello World" category (which does not yet exist)
3a. (Note this is where Postgres would normally check the foreign key constraint and fail)
4. Insert the "Hello World" Category
5. Commit the transaction
6. Because we're using the DEFERRED feature, the foreign key check
will happen now, at the end of the transaction, instead of at 3a,
and it will succeed, because "Hello Wolrd" category now exists!
Run Code Online (Sandbox Code Playgroud)
简而言之,除非您知道需要使用deferrable密钥,false否则应该省略密钥(或将其设置为)。
| 归档时间: |
|
| 查看次数: |
1110 次 |
| 最近记录: |