对值的约束,oracle数据库

时间:2015-05-17 19:21:44

标签: sql oracle ddl

我想在我的Oracle数据库中有一个表,attribute1(值可能会更改)的值不能大于attribute2的值(固定)。

是否可以执行这样的规则? 插入后是否有可能使值无法改变?

2 个答案:

答案 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回答了。