gpt4 book ai didi

sql - 是否可以使用 SQL 约束来防止在条件成立时更改特定值?

转载 作者:行者123 更新时间:2023-12-04 12:24:32 25 4
gpt4 key购买 nike

我知道 SQL 约束可以强制数据满足有效性标准。但是,诸如“学生的成绩只能在 'finalised' 标志为假时更新”之类的标准呢?应用程序是否必须处理此类更新标准?

最佳答案

触发器、约束和附加列。

从最后开始:

  • 附加列存储要“固定”的值:
    ALTER TABLE ADD SavedGrade int
  • 该约束限制了 Grade 的更改柱子:
    ALTER TABLE Students
    ADD CONSTRAINT CK_Grade CHECK (Finalised = 'false' OR Grade = SavedGrade)
  • Grade 时,触发器更新附加列列已更新(以下适用于 SQL Server):
    CREATE TRIGGER StudentsFinaliseGrade
    ON Students AFTER INSERT, UPDATE
    AS
    IF UPDATE(Grade)
    UPDATE Students
    SET SavedGrade = i.Grade
    FROM inserted i
    WHERE i.ID = Students.ID
    AND i.Grade <> i.SavedGrade

  • 所以,只要 Finalised = 'false' , Grade列可能会更改。当它改变时,该值立即存入 SavedGrade柱子。 (我们直接更新 SavedGrade,否则约束将不允许我们将 Finalised 设置为 'true' 。)一旦 Finalised设置后,您不能再更改 Grade列因为约束。

    关于sql - 是否可以使用 SQL 约束来防止在条件成立时更改特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6616463/

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