问题描述
当我想像这样放置约束时,如何在sql中使用检查约束:
Y must be NOT NULL when X=‘hello’;
when X != ‘hello’ Y can be NULL
我尝试过这种方法,但是没有用。.
ALTER TABLE table
ADD ( CONSTRAINT cons CHECK ( X= ‘hello’ and Y!= NULL or X!= ‘hello’));
解决方法
如果我理解逻辑,则正确的语法是:
ALTER TABLE table ADD CONSTRAINT cons
CHECK ( X = 'hello' and Y IS NOT NULL NULL OR X <> 'hello');
,
您可以使用:
ALTER TABLE table_name
ADD CONSTRAINT cons CHECK ( Y IS NOT NULL OR X <> 'hello');
然后,如果您有:
CREATE TABLE table_name ( x VARCHAR2(5),y VARCHAR2(5) );
然后您可以插入以下值:
INSERT INTO table_name ( x,y )
SELECT 'hello','abc' FROM DUAL UNION ALL
SELECT 'other',NULL FROM DUAL;
但是,如果您尝试:
INSERT INTO table_name ( x,y ) VALUES ( 'hello',NULL );
您会得到例外:
ORA-02290: check constraint (SCHEMA_NAME.CONS) violated
db 提琴here