无法在 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
(实际上是多余的)。
我正在尝试运行以下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
(实际上是多余的)。