我正在sqlite3(Python)中设置一个表。我创建的表称为测试和
我需要在这个表中添加一个约束条件,其中对于任何给定的日期,唯一条目的数量都不能大于3。主键是x、y,并且从开始有效。注意,我有很多有效日期,但这只是为了说明。
con = sqlite3.connect(path2Database)
cursorObj = con.cursor()
query = """ CREATE TABLE IF NOT EXISTS TEST
(x INTEGER NOT NULL,
y INTEGER NOT NULL,
Valid_from DATE NOT NULL,
Valid_until DATE,
value REAL,
PRIMARY KEY (x, y, Valid_from) )"""
cursorObj.execute(query)
cursorObj.execute("""INSERT OR REPLACE INTO TEST VALUES
(2, 3, '2023-02-28', '2023-03-04', 1),
(1, 1, '2023-02-28', '2023-03-05', 1),
(4, 2, '2023-02-28', '2023-03-02', 1)
""")
con.commit()
我应该无法插入另一个有效日期为“2023-02-28”的行,因为它只允许任何给定日期有3个值。
cursorObj.execute("""INSERT INTO TEST VALUES (4, 2, '2023-02-28', '2023-03-02', 1)""")
我试图添加下面的约束,但我经常遇到操作错误。解决这个问题的最佳方法是什么?
query = """ CREATE ASSERTION checkCount CHECK
( NOT EXISTS (
SELECT COUNT(x) AS total
FROM TEST
GROUP BY Valid_from
HAVING total > 3
))"""
谢谢