gpt4 book ai didi

sql - 2 列上的 Postgresql 约束,因此 "col_a"不能共享 "col_b"的任何值

转载 作者:行者123 更新时间:2023-12-04 01:10:44 24 4
gpt4 key购买 nike

我正在构建一个包含系统条码以及自定义条码选项的数据库。我对 custom_barcodesystem_barcode 有一个独特的约束。
我想要做的是如果 custom_barcode 的值为“123”,则没有其他行可以有值为“123”的 custom_barcodesystem_barcode。我不是要创建一个 2 列的唯一约束,如果custom_barcode 是“123”,system_barcode 是“456”,这种组合不能再存在了。有可能实现吗?我想知道这是否需要通过触发器来实现。

最佳答案

如果我正确地跟随您,您可以使用检查约束和基于数组的排除约束来执行此操作:

create table mytable (
id serial primary key,
custom_barcode int,
system_barcode int,
check (custom_barcode <> system_barcode),
exclude using gist((array[custom_barcode, system_barcode]) with &&)
);
检查约束确保不能对同一行上的两列赋予相同的值。
排除约束构建一个包含这两个代码的数组,并确保没有数组与当前行重叠的行。
这是 a demo :
insert into mytable (custom_barcode, system_barcode) values (1, 1);
-- ERROR: new row for relation "mytable" violates check constraint "mytable_check"

insert into mytable (custom_barcode, system_barcode) values (2, 3);
-- ok

insert into mytable (custom_barcode, system_barcode) values (4, 2);
-- ERROR: conflicting key value violates exclusion constraint "mytable_array_excl"
-- DETAIL: Key ((ARRAY[custom_barcode, system_barcode]))=({4,2}) conflicts with existing key ((ARRAY[custom_barcode, system_barcode]))=({2,3}).

关于sql - 2 列上的 Postgresql 约束,因此 "col_a"不能共享 "col_b"的任何值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64939812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com