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

时间:2019-02-14 11:14:09

标签: sql constraints check-constraints notnull

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

searchtype_id bigint NOT NULL

CONSTRAINT searchtype_id_nn CHECK ((searchtype_id IS NOT NULL))

2 个答案:

答案 0 :(得分:3)

有区别吗?是。 NOT NULL是列类型的存储定义的一部分。因此,NOT NULL会影响值的存储方式(是否需要NULL标志?)。 NOT NULL定义还可以在查询的编译阶段用于优化。

相比之下,CHECK约束确实可以验证数据是否符合某些特征,但是在编译阶段将不太可能使用此信息。

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

我认为

NULL-ability是类型的一部分-因为它是语言中内置的声明,该声明要求“此列必须具有值”。可以接受NULL值的整数列与不能接受的整数有细微差别。

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

答案 1 :(得分:1)

两者都是不同的,并且很难在它们之间进行选择,因为某些事物适用于一个事物,而某些事物不适用于其他事物,例如NOT NULL约束只能内联声明,而CHECK约束可以应用于离线约束。 如果我必须在其中之一之间进行选择,那么我将选择离线:

  • 我将能够单独命名约束,一旦遇到错误或其他问题,这将有助于调试。
  • 同样,CHECK约束将允许我引用只能用作离线约束的单列和多列。