gpt4 book ai didi

mysql - 如何使用sql向该表添加约束?

转载 作者:行者123 更新时间:2023-11-30 21:26:24 27 4
gpt4 key购买 nike

我有一个名为 Student 的表,该表有 2 列 Student_IdIs_Honor_Student(这是一个标志列 0 1 表示真/假)

我有另一个名为 Honor_Student 的表,它有 2 列 Student_IdClass_Id,以及一些与此问题无关的其他列。

当然是第 3 个表 Class,它有一个 Class_Id 列。

最后是一个名为 Enrollment 的表,其中有 Student_IdClass_Id 引用了 StudentClass 表。

好的,所以我想要的是一个约束来检查如果一个学生是优等生,那么在允许我将记录插入 Honor_Student 表中之前必须存在一个条目 Enrollment 表。如果学生不是优等生,则此限制不适用。我怎样才能做到这一点?

顺便说一句,我正在使用 jdbc liquibase,所以我将非常感谢任何使用 liquibase 的示例:https://www.liquibase.org/documentation/changes/add_check_constraint.html

但是对于初学者来说,即使使用 Alter Table 或一些可以使这成为可能的方法,我真的很感激在正确的方向上踢球......从技术上讲,我认为我正在寻找一个“有条件的” Student_IdClass_Id 引用 Honor_Student 表的外键约束,但前提是它是优等生……这有点奇怪。

最佳答案

AFAIK 我想我正在寻找一个“有条件的”外键约束这可能是不可能的。

您可以使用 User Define FunctionConditional CHECK约束:

例如:

用户定义函数:

CREATE FUNCTION IsHonarStudentExist (
@Student_Id INT
)
RETURNS bit
AS
BEGIN
IF EXISTS (SELECT * FROM Honor_Student WHERE Student_Id = @Student_Id)
return 1
return 0
END

检查约束:

ALTER TABLE Student WITH CHECK
ADD check (
(Is_Honor_Student= 1 AND IsHonarStudentExist (Student_Id) = 1)
OR
(Is_Honor_Student= 0)

注意:语法、数据类型和查询可能因您的数据库而异。上面的代码只是一种方法。

关于mysql - 如何使用sql向该表添加约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58795342/

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