sql - 如果另一列为空,禁止用户更新列?

标签 sql postgresql triggers constraints

我有 mytable,它有 3 个整数字段:idstatusproject_id

我已经告诉人们,在为其分配一个 project_id 值之前,他们不应该让状态超过 4。人们自然不会听,然后就会出现问题。

如果有人在 project_id 列为 null 时尝试从状态 4 更新到状态 5,是否有办法返回错误?我仍然需要人们能够将状态从 2 或 3 更新到状态 4,无论它是否具有 project_id

最佳答案

您可以使用 CHECK constraint如果您需要非常简单的检查,请按照@stickbit 的建议。

如果需要更复杂的逻辑,可以使用TRIGGER functionality

CREATE FUNCTION check_status()
  RETURNS trigger AS
$mytrigger$
BEGIN
   IF OLD.status = 4 AND NEW.status >= 5 AND NEW.project_id IS NULL THEN
      RAISE EXCEPTION 'Project ID must be assigned before progressing to status 5';
   END IF;
   RETURN NEW;
END
$mytrigger$
LANGUAGE plpgsql;

CREATE TRIGGER project_id_check
BEFORE UPDATE ON "MyTable"
FOR EACH ROW EXECUTE PROCEDURE check_status();

关于sql - 如果另一列为空,禁止用户更新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54289874/

相关文章:

c++ - 更新 QTreeView 而不更改选择

sql - 查询字符长度的WHERE条件?

Mysql:无法创建表 errno 150

postgresql - 即使在 ON CONFLICT DO NOTHING 情况下,postgres INSERT 触发器也会触发

php - 计算数据库查询事件记录的所有结果

postgresql - 用于提供外部 postgreSQL 数据库的 Drupal 数据模块

java - 当我收到超时错误时,如何将 Azure postgres 数据库连接到 pgadmin

sql - 使用触发器更新多个表

mariadb 中的 mysql 触发器语法错误

wpf - XAML 代码中的函数调用?