为什么在复合主键中允许空值而不允许空值



我正在工作的应用程序连接到雪花数据库。我在加载CSV文件时偶然发现了一个问题。如果在加载

期间遇到任何空值,则在复制命令中使用NULL_IF条件将列值更改为null。经过调查,我了解到其中一列是复合主键的一部分,并且该列的值在几行中为空。在我删除NULL_IF条件后,它开始正常工作。

为什么在复合主键中允许空值而不允许空值?

我搜索了很多,但所有的答案都试图解释为什么复合键列不能有空值,这在某种程度上是有意义的。但是为什么空值被认为是合法的呢?有人能解释一下吗?由于

例子:

CREATE TABLE table_employee (
column1 Varchar2(255),
column2 Varchar2(255),
column3 Varchar2(255),
primary key (column1, column2)
....
);

下面的插入将成功:

INSERT INTO table_employee(column1, column2, column3, ...)
VALUES ('', 'abc', '', ...);

下面的插入将失败:

INSERT INTO table_employee(column1, column2, column3, ...)
VALUES (null, 'abc', '', ...);

为什么空值被认为是合法的

空字符串和NULL值

空字符串是指长度为零或没有字符的字符串,而NULL值表示没有数据。

因此,空字符串在概念上与NULL不同。