我想在我的Oracle数据库中有一个表,attribute1
(值可能会更改)的值不能大于attribute2
的值(固定)。
是否可以执行这样的规则? 插入后是否有可能使值无法改变?
答案 0 :(得分:1)
禁止attribute1
大于attribute2
可以使用check
约束来完成:
ALTER TABLE mytable
ADD CONSTRAINT attribute2_greater_check
CHECK (attribute2 >= attribute1)
可以使用引发错误的attribute2
来阻止更新trigger
:
CREATE OR REPLACE TRIGGER mytable_attribute2_update_tr
BEFORE UPDATE ON mytable
FOR EACH ROW
BEGIN
IF :NEW.attribute2 != :OLD.attribute2
THEN
RAISE_APPLICATION_ERROR(-20101, 'attribute2 cannot be updated');
END IF;
END;
/
答案 1 :(得分:1)
一种方法是在创建表时使用适当的CONSTRAINT
:
CREATE TABLE table_name
(
column1 integer,
column2 integer not null,
CONSTRAINT constraint_name CHECK (column1 <= column2)
);
INSERT INTO table_name VALUES(1,1); //ok
INSERT INTO table_name VALUES(2,1); //gives an error
此类约束可以使用手头的表中的任何字段,但不能通过子选择访问其他表。
编辑:我刚刚意识到你还问过另一个问题......已经被@Mureinik回答了。