首页 > 解决方案 > SQL (Oracle) - 如果在同一个表的另一列中输入包含特定值的数据,如何强制一列中的值为 NULL?

问题描述

我试图弄清楚如果在另一列中输入了特定值,您将如何将表中的某个列设置为 NULL 或特定字符串(如“N/A”)。

我正在为教师创建一个表,每个教师都有一个主管 ID(即与另一位直接上司的教师相关的 ID),但我不希望校长能够有一个主管。我将如何创建一个约束或方法,以便如果表中另一列的值 - “teacherRole”作为“校长”插入,您将无法为该个人提供主管 ID,并将其设置为 NULL?

即 IF teacherRole = "校长" SET supervisorID = NULL

另外,我正在使用另一个约束,因此“teacherRole”只能是选定数量的值之一,例如“PE Teacher”或“Maths Teacher”,并且想确保另一个约束不会与此冲突?

标签: sqloracleconstraints

解决方案


为了防止这种情况,您可以向表中添加检查约束:

alter table mytable
   add constraint mytable_chk1
      check (not (teacherRole = 'Head Teacher' and supervisorID is not NULL));

然后,如果有人尝试插入或更新一行以验证约束,他们将引发异常。


推荐阅读