1
我不是那么到数据库(我使用MySQL的),我有以下疑问的**独特约束设置好的可为空场在可空字段上定义的MySql唯一约束究竟如何工作?
所以从我所知道的唯一约束确保所有列中的值不同。
但是,如果我设置一个表的可空字段的唯一约束会发生什么。
例如,我有此DDL表定义:
CREATE TABLE results (
id BigInt UNSIGNED NOT NULL AUTO_INCREMENT,
sample_id VarChar(128) NOT NULL,
doi VarChar(128),
result VarChar(2) NOT NULL,
error Text,
PRIMARY KEY (
id
)
) ;
ALTER TABLE results COMMENT = '';
ALTER TABLE results ADD CONSTRAINT fk_results_pgrfas FOREIGN KEY (sample_id)
REFERENCES pgrfas (sample_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE results ADD CONSTRAINT u_results UNIQUE
(doi);
其中DOI字段可为空。在此字段中设置了唯一约束,因为我想阻止该表的更多行具有相同的值doi字段。
每一行需要有不同的DOI值,但让我需要有多个行有设置好的为null DOI场本场可以为空。
唯一性约束仅适用于设置好的值或也防止型动物行具有此DOI场空价值? (这对我来说是一个问题,因为我需要唯一约束只对非空值起作用)。
那么我可以插入多行,其中doi字段设置为空?
想想这样:'NULL'不等于_anything_,包括另一个'NULL'。因此,“唯一”索引中可能有大量“NULL”值是合乎逻辑的。 –
@RickJames。 。 。这不是一个很好的推理。一些数据库允许多个“NULL”值;有些不。这只是你必须记住的事情(或记住要查找),比如数据库是否进行整数除法。 –