gpt4 book ai didi

sql - CHECK值不在同一表的另一列中

转载 作者:行者123 更新时间:2023-12-03 18:57:21 25 4
gpt4 key购买 nike

我有一个表aliases,它将8个字符的ID映射到其他一些规范的8个字符的ID。我希望数据库引擎确保没有循环。使用SQLAlchemy,表描述为(略有简化):

Table('aliases', database,
Column('from', CHAR(8), primary_key = True),
Column('to', CHAR(8), nullable = False),
CheckConstraint('"to" not in (select "from" from aliases)')
)


生成以下SQL:

CREATE TABLE aliases (
"from" CHAR(8) NOT NULL,
"to" CHAR(8) NOT NULL,
PRIMARY KEY ("from"),
CHECK ("to" not in (select "from" from aliases))
)


使用 no such table: aliases的SQLite扼流圈,弄清楚 aliases尚不存在的意义。 SQLite(还有扩展名,任何数据库引擎)是否可以进行这种检查?

最佳答案

检查约束不能包含子查询(sqlite.org/lang_createtable.html)。

在支持检查约束的数据库中通常是这样。

解决该问题的一种方法是创建一个用户定义的函数,该函数将检入表。这在SQLite中有点痛苦,因为您无法在SQL中定义函数。

另一种方法是在插入或更新值时使用触发器。触发器可以使用子查询来实现您的目标。

关于sql - CHECK值不在同一表的另一列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17385911/

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