小编Ber*_*rgi的帖子

为什么我的 UNIQUE 约束没有触发?

我有这个UNIQUE限制:

ALTER TABLE table ADD CONSTRAINT "abc123" UNIQUE
("col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8");
Run Code Online (Sandbox Code Playgroud)

然后我这样做:

INSERT INTO table ("col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8") 
VALUES ('a', 'b', 'c', 'd', 'e', 'f', null, true);
INSERT INTO table ("col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8") 
VALUES ('a', 'b', 'c', 'd', 'e', 'f', null, true);
Run Code Online (Sandbox Code Playgroud)

两者都有效。两行已添加到表中。从逻辑上讲,第二个应该失败。但事实并非如此。

我究竟做错了什么?这让我发疯。

注意:如果这是我自己的数据,我将拥有一个真正独特的列,而不是这个“疯狂”的UNIQUE约束。问题是这个表保存了我的银行帐户的记录,而且他们愚蠢地在 CSV 转储中没有真正的“唯一”列,我可以用它来实际确保不插入重复的行,所以我有提出一个组合整个表中所有列以确定唯一性的方法。

postgresql null unique-constraint

14
推荐指数
2
解决办法
9798
查看次数

为什么根据 SQL-92,未加引号的标识符是大写的?

SQL-92 标准的第 5.6 节包含规则 10...13,其中未加引号的标识符应大写,因此foo变为FOO"foo"仍然是foo

例如,Oracle、IBM DB2、SnowflakeksqlDB遵守这些规则,但Postgres 、MySQL 或 SQLite 则不遵守这些规则。

问题是,为什么?根据我的理解,在具有大量关键字的语言中可选地引用标识符是有意义的。标识符一致的区分大小写或不区分大小写也是有意义的。但让它依赖于被引用的标识符看起来并不合理。

我缺少什么?

syntax sql-standard case-sensitive quoted-identifier

6
推荐指数
2
解决办法
881
查看次数