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

一旦检查条件就绪,未来值将在行被修改之前针对该条件评估 。

我会去插入触发器之前。你有更多的选择,并可以带来更好的错误信息。