sql中的内联和外联约束之间有什么区别吗?

问题描述 投票:1回答:2

使用哪一个或哪一个更好?有什么区别吗?

searchtype_id bigint NOT NULL 要么 CONSTRAINT searchtype_id_nn CHECK ((searchtype_id IS NOT NULL))

sql constraints check-constraints notnull
2个回答
3
投票

有区别吗?是。 NOT NULL是列类型的存储定义的一部分。那么,NOT NULL会影响值的存储方式(需要NULL-flag吗?)。在查询的编译阶段,NOT NULL定义也可用于优化。

相比之下,CHECK约束确实证实数据满足某些特征,但在编译阶段不太可能使用此信息。

NOT NULL定义早于CHECK约束,并且是所有数据库的标准。

NULL-ability是我认为属于该类型的一部分 - 因为它是语言中内置的声明,表示“此列需要具有值”。可以采用NULL值的整数列与不能的整数列略有不同。

我建议使用NOT NULL语法而不是CHECK约束。它为数据库提供了有关该列的更多信息。


1
投票

两者都是不同的,很难在它们之间进行选择,因为有些东西适用于一个而有些则不适用于其他类似NOT NULL约束只能在内联声明,而CHECK约束可以应用于外部约束。如果我必须在其中一个之间做出选择,我会选择外线:

  • 我将能够单独命名我的约束,这有助于在出现错误时进行调试。
  • CHECK约束也允许我引用单个列和多个列,这些列只能用作行外约束。
© www.soinside.com 2019 - 2024. All rights reserved.