Sybase检查约束评估
问题描述:
我试图在SQL Anywhere 9.0中制定一些检查约束。Sybase检查约束评估
基本上我有模式是这样的:
CREATE TABLE limits (
id INT IDENTITY PRIMARY KEY,
count INT NOT NULL
);
CREATE TABLE sum (
user INT,
limit INT,
my_number INT NOT NULL CHECK(my_number > 0),
PRIMARY KEY (user, limit)
);
我试图强制约束my_number
每个限制是在表最计数。
我已经试过
CHECK ((SELECT sum(my_number) FROM sum WHERE limit = limit) <= (SELECT count FROM limits WHERE id = limit))
和
CHECK (((SELECT sum(my_number) FROM sum WHERE limit = limit) + my_number) <= (SELECT count FROM limits WHERE id = limit))
,他们都似乎没有做正确的事情。他们都是一个关(也就是说,一旦你得到一个负数,然后插入将失败,但在此之前。
所以我的问题是,这些子查询被执行的表是什么版本?表发生插入之前,还是子插件发生插入后检查一致性,并回滚,如果它发现它是无效的?
答
我真的不明白你在这里执行什么,但基于这个帮助主题
Using CHECK constraints on columns
一旦检查条件就绪,未来值将在行被修改之前针对该条件评估 。
我会去插入触发器之前。你有更多的选择,并可以带来更好的错误信息。