SQL Anywhere 9.0 でチェック制約を作成しようとしています。
基本的に、私は次のようなスキーマを持っています:
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))
どちらも正しいことをしていないようです。どちらも 1 ずれています (つまり、負の数を取得すると、挿入は失敗しますが、それ以前ではありません。
私の質問は、これらのサブクエリが実行されているテーブルのバージョンは何ですか? 挿入が発生する前のテーブルですか、それとも、挿入が発生した後にサブクエリが一貫性をチェックし、無効であることが判明した場合はロールバックしますか?