gpt4 book ai didi

sql - 如何保证一张表恰好只有一行一列?

转载 作者:行者123 更新时间:2023-11-29 12:31:56 25 4
gpt4 key购买 nike

使用 PostgreSQL 11.5。我需要允许一个表只允许其中的一行和一列(不是 0 或 2,恰好是 1)。我觉得 ADD CONSTRAINT 会很有用,但我不确定该怎么做。

我希望能够在需要时更新这一行。

使以下内容有效的东西:

 foo
-----
bar

但不是以下内容:

 foo | baz
-----+-----
bar | bin
-----+-----
| gar

最佳答案

您可以强制一个表只有一行,在您的主键(或任何其他唯一且不可为 null 的列)上设置 CHECK 约束,如下所示:

ALTER TABLE <tablename> ADD CONSTRAINT [<name>] CHECK ([pk/unique field] = [constant value]);

无论如何,既然你想要一个可更新的字段,你就需要使用一个有 2 列的表。如果你真的只需要一行(并且只选择 foo 或为此目的创建一个 View 不是一个选项),你也可以在插入和删除时使用触发器(并拒绝其中的任何操作通过引发异常)。为避免有一个空表(不确定是否需要),您还需要这个删除触发器,约束不够强。对于触发器,请参见此处:https://www.postgresql.org/docs/current/triggers.html

要避免任何进一步的 ALTER TABLE 命令(例如添加列)和 DROP TABLE,请使用事件触发器。有关详细信息,请查看文档:https://www.postgresql.org/docs/current/event-triggers.html

要将 PL/pgSQL 与触发器一起使用,还可以查看 https://www.postgresql.org/docs/current/plpgsql-trigger.html

关于sql - 如何保证一张表恰好只有一行一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58038967/

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