为什么在复合主键中允许空值但不允许空值
why empty values are allowed but not null values in composite primary keys
我正在开发一个连接到 Snowflake 数据库的应用程序。我在加载 CSV 文件时偶然发现了一个问题。如果在加载期间遇到任何空值,我在 copy command 中使用 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', '', ...);
why empty value is considered legit
An empty string is a string with zero length or no characters, whereas NULL values represent an absence of data.
因此空字符串在概念上不同于 NULL
。
我正在开发一个连接到 Snowflake 数据库的应用程序。我在加载 CSV 文件时偶然发现了一个问题。如果在加载期间遇到任何空值,我在 copy command 中使用 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', '', ...);
why empty value is considered legit
An empty string is a string with zero length or no characters, whereas NULL values represent an absence of data.
因此空字符串在概念上不同于 NULL
。