无法在 table 'tp_ladder' 中的可空列上定义 PRIMARY KEY 约束

Cannot define PRIMARY KEY constraint on nullable column in table 'tp_ladder'

我正在尝试运行以下SQL声明

--dropping customer TABLE--
DROP TABLE tp_ladder;

--creating ladder TABLE
CREATE TABLE tp_ladder (
    ladder_id         INTEGER,
    ladder_type       VARCHAR(50),
    ladder_name       VARCHAR(50) NOT NULL,
    ladder_discount   DECIMAL(3,2),
    ladder_price      DECIMAL(8,2) NOT NULL,
    ladder_weight     DECIMAL(5,2),
    ladder_height     DECIMAL(5,2),
    ladder_rating     DECIMAL(10,2),
    warehouse_id      INTEGER    
);

--creating primary key for ladder table
ALTER TABLE tp_ladder

ADD CONSTRAINT tp_ladder_ladder_id
PRIMARY KEY(ladder_id);

但是我收到错误消息:

Cannot define PRIMARY KEY constraint on nullable column in table 'tp_ladder'

有什么建议吗?

错误已经很明显了,但是为什么是错误就不是很明显了。

其他数据库(例如 MySQL 和 Postgres)允许您为所欲为——在未明确声明为 NOT NULL 的列上添加主键。毕竟,PRIMARY KEY 也施加了 NOT NULL 约束。这是令人惊讶的,尤其是在空的 table 上。所以,错误并不明显。

此外,SQL 服务器存储所有列的空标志,甚至是声明为 NOT NULL 的列。因此,即使有数据,也不需要更改数据(假设没有 NULL 值)。并非所有数据库都以相同的方式存储 NULL 标志。

如果您定义了 table,您可以使用以下方式修改该列:

ALTER TABLE tp_ladder ALTER COLUMN ladder_id INT NOT NULL

这将允许您添加主键约束。

但是,我建议您在创建 table:

ladder_id INT PRIMARY KEY

注意在CREATE TABLE中定义时,不需要NOT NULL(实际上是多余的)。