我正在尝试运行以下 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);
但是我收到错误消息:
<块引用>无法在表 'tp_ladder' 中的可空列上定义 PRIMARY KEY 约束
有什么建议吗?
答案 0 :(得分:2)
错误很明显,但为什么会出错却不是很明显。
其他数据库(例如 MySQL 和 Postgres)确实允许您做您想做的事——在未明确声明为 NOT NULL
的列上添加主键。毕竟,PRIMARY KEY
也强加了 NOT NULL
约束。这令人惊讶,尤其是在一张空桌子上。所以,错误并不明显。
此外,SQL Server 存储所有列的空标志,即使是那些声明为 NOT NULL
的列。因此,即使有数据,数据也不需要更改(假设没有 NULL
值)。并非所有数据库都以相同的方式存储 NULL
标志。
如果您已经定义了表,您可以使用以下方法修改列:
ALTER TABLE tp_ladder ALTER COLUMN ladder_id INT NOT NULL
这将允许您添加主键约束。
但是,我建议您在创建表时内嵌:
ladder_id INT PRIMARY KEY
请注意,在 CREATE TABLE
中定义时,不需要 NOT NULL
(实际上是多余的)。