使用哪个或哪个更好?有什么区别吗?
searchtype_id bigint NOT NULL
或
CONSTRAINT searchtype_id_nn CHECK ((searchtype_id IS NOT NULL))
答案 0 :(得分:3)
有区别吗?是。 NOT NULL
是列类型的存储定义的一部分。因此,NOT NULL
会影响值的存储方式(是否需要NULL
标志?)。 NOT NULL
定义还可以在查询的编译阶段用于优化。
相比之下,CHECK
约束确实可以验证数据是否符合某些特征,但是在编译阶段将不太可能使用此信息。
NOT NULL
定义早于CHECK
约束,并且在所有数据库中都是标准的。
NULL-ability是类型的一部分-因为它是语言中内置的声明,该声明要求“此列必须具有值”。可以接受NULL
值的整数列与不能接受的整数有细微差别。
我建议使用NOT NULL
语法而不是CHECK
约束。它为数据库提供了有关该列的更多信息。
答案 1 :(得分:1)
两者都是不同的,并且很难在它们之间进行选择,因为某些事物适用于一个事物,而某些事物不适用于其他事物,例如NOT NULL约束只能内联声明,而CHECK约束可以应用于离线约束。 如果我必须在其中之一之间进行选择,那么我将选择离线: