SQLite检查约束允许对现有数据进行检查吗?

wvyml7n5  于 2023-01-09  发布在  SQLite
关注(0)|答案(1)|浏览(150)

SQLite检查约束是否支持对现有数据进行检查?我刚刚读了这篇文章https://www.sqlitetutorial.net/sqlite-check-constraint/,我的印象是检查只能应用于插入的数据,不包括现有数据。
下面是我的用例,假设数据库已经有几行整数数据,并且它们都遵循这个规则,没有数据小于最小数据的一半。现在我想对所有要插入的数据强制执行这个规则。
例如,假设我已经有了以下数据:10、11、12、15、16。可以加上6,因为它大于5,而5是最小数据10的一半;但不应允许加上3,因为它小于5。
谢谢!

nvbavucw

nvbavucw1#

从CREATE TABLE/CHECK约束条件:
CHECK约束的表达式不能包含子查询。
由于获取列的最小值的唯一方法是查询,这意味着不可能使用CHECK约束来实现。
使用触发器:

CREATE TRIGGER trg_value BEFORE INSERT ON tablename
BEGIN
   SELECT
      CASE
        WHEN NEW.value < (SELECT MIN(value) FROM tablename) / 2
          THEN RAISE (ABORT, 'Invalid value')
      END;
END;

请参见demo

相关问题