postgresql中mul键的等价物是什么?

imzjd6km  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(564)

我一直在研究mysql中的mul键,据我所知,这个键允许给定值多次出现。非唯一性意味着该值在列中可以出现多次。
1). 我的理解正确吗
2). 有必要在postgresql中复制mul密钥吗
如果问题的答案是肯定的,那么。。。
3). 如何在postgresql中创建mul密钥
谢谢

sdnqo3pr

sdnqo3pr1#

从gordon的回答中,我了解了mysql的这个特性。postgresql(幸运的是,我必须补充一点)没有。
重述您的问题:
1). 我的理解正确吗
是的,你的理解是正确的。然而,重要的是要理解,在关系数据库世界中,“键”的概念意味着唯一性。然而,在mysql中,它是“index”(unique和non-unique)的同义词。在这种情况下 MUL 表示:非唯一索引。
2). 有必要在postgresql中复制mul密钥吗
postgresql有索引,唯一索引和非唯一索引。它们与mysql的“键”覆盖了相同的领域,除了“导出外键”这一额外的特性,我认为这是粗略的;postgrsql不允许它们。无论如何,最好离他们远点。
如果问题的答案是肯定的,那么。。。
答案是“是”,上面提到了警告。
3). 如何在postgresql中创建mul密钥
只需创建一个简单的索引。例如:

create index ix1 on my_table (my_column);

可以在索引中包含多列,并用逗号分隔。默认情况下,它是非唯一的。
为什么要远离非唯一的导出外键?
您可能会问,为什么导出非唯一密钥会成为一个问题?请参见此示例:

create table t (a int, b int);

create index ix1 on t (a);

insert into t (a, b) values (null, 1), (123, 2), (456, 3), (456, 4);

create table u (
  c int,
  constraint fk1 foreign key (c) references t (a) on update cascade
);

-- the statement above makes column "a" an Exported Foreign Key.    

insert into u (c) values (null), (123), (456);

-- row 456 in table u, points to two rows (3 and 4) in table t.

update t set a = a + 1 where b = 4;

-- after updating, row 456 in table u, points to a single row in t

参见db fiddle的运行示例。
在本例中,您可以验证外键关系在单个 UPDATE .

pzfprimi

pzfprimi2#

mul键仅仅意味着该键是mysql中索引(非唯一索引)的一部分。
这样的钥匙没什么特别的。在这两个数据库中,都可以使用 CREATE INDEX . 您不应该将这些键用于外键约束,尽管mysql允许这样做似乎违反了标准sql。

相关问题