如何使用 sql 向 table 添加约束?
How do I add a constraint to this table using sql?
我有一个名为 Student
的 table,这个 table 有 2 列 Student_Id
和 Is_Honor_Student
(这是一个标志列 0
或 1
表示 true/false)
我有另一个名为 Honor_Student
的 table,它有 2 列 Student_Id
和 Class_Id
,以及一些与此问题无关的其他列。
当然是第 3 个 table Class
,它有一个 Class_Id
列。
最后是一个名为 Enrollment
的 table,它有 Student_Id
和 Class_Id
引用 Student
和 Class
table s.
好的,所以我想要的是一个约束来检查一个学生是否是优等生,那么在允许我插入记录之前,Honor_Student
table 中必须存在一个条目进入 Enrollment
table。如果学生不是优等生,则此限制不适用。我怎样才能做到这一点?
顺便说一句,我正在使用 jdbc liquibase,所以我将不胜感激任何使用 liquibase 的示例:https://www.liquibase.org/documentation/changes/add_check_constraint.html
但是对于初学者来说,即使使用 Alter Table
或一些可以使这成为可能的方法,我真的很感激在正确的方向上踢球......从技术上讲,我认为我正在寻找 "conditional" Student_Id
和 Class_Id
的外键约束引用 Honor_Student
table 但前提是它是优等生……有点奇怪。
AFAIK 我想我正在寻找一个 "conditional" 外键约束 这可能是不可能的。
您可以使用User Define Function and Conditional CHECK约束:
例如:
UDF:
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)
注意:语法、数据类型和查询可能因您的数据库而异。
上面的代码只是一种方法。
我有一个名为 Student
的 table,这个 table 有 2 列 Student_Id
和 Is_Honor_Student
(这是一个标志列 0
或 1
表示 true/false)
我有另一个名为 Honor_Student
的 table,它有 2 列 Student_Id
和 Class_Id
,以及一些与此问题无关的其他列。
当然是第 3 个 table Class
,它有一个 Class_Id
列。
最后是一个名为 Enrollment
的 table,它有 Student_Id
和 Class_Id
引用 Student
和 Class
table s.
好的,所以我想要的是一个约束来检查一个学生是否是优等生,那么在允许我插入记录之前,Honor_Student
table 中必须存在一个条目进入 Enrollment
table。如果学生不是优等生,则此限制不适用。我怎样才能做到这一点?
顺便说一句,我正在使用 jdbc liquibase,所以我将不胜感激任何使用 liquibase 的示例:https://www.liquibase.org/documentation/changes/add_check_constraint.html
但是对于初学者来说,即使使用 Alter Table
或一些可以使这成为可能的方法,我真的很感激在正确的方向上踢球......从技术上讲,我认为我正在寻找 "conditional" Student_Id
和 Class_Id
的外键约束引用 Honor_Student
table 但前提是它是优等生……有点奇怪。
AFAIK 我想我正在寻找一个 "conditional" 外键约束 这可能是不可能的。
您可以使用User Define Function and Conditional CHECK约束:
例如:
UDF:
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)
注意:语法、数据类型和查询可能因您的数据库而异。 上面的代码只是一种方法。