복붙노트

[SQL] 열 NOT NULL 제약 조건을 통해 집합

SQL

열 NOT NULL 제약 조건을 통해 집합

나는 현재 그것의 이메일 컬럼에 NOT NULL 제약 조건이 포스트 그레스의 테이블이있다. 이 표는 선택 사항입니다 전화 열이 있습니다. 나는 이메일하지 않고 있지만 이들 NOT NULL로 전화가있는 경우 일부 레코드를 허용하도록 시스템을 싶습니다. 즉, 내가 만들거나 하나 또는 이메일이나 전화 필드가 모두있는 경우 UPDATE 쿼리가 오류없이 성공 같은 NOT NULL 데이터베이스 제약 조건이 필요합니다.

더 위가 확장, 그것은 레코드가 성공적으로 업데이트하거나 생성하는 NOT NULL이어야 하나 이상있는 열 이름의 집합을 지정하려면 포스트 그레스 가능하다?

해결법

  1. ==============================

    1.@Igor 꽤 권리와 OR 연산 식의 몇 빠르고 간단합니다.

    @Igor 꽤 권리와 OR 연산 식의 몇 빠르고 간단합니다.

    열 (A, B, C, D, E, F 예에서 g)의 긴 목록이 짧고만큼 빠르다 :

    CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
    

    DB <> 바이올린 여기 올드 SQL 바이올린.

    위의 더 자세한 형태는 다음과 같습니다

    CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
    

    ROW 여기에 중복 구문입니다.

    우리는 제외 할 정확하게 될 일 - 매일 열이 NULL 인 경우 IS NULL와 ROW 식을 테스트 만 TRUE보고합니다.

    단지 (A, B, C, D, E, F, G)이 식을 반전이 매 컬럼 NULL 아니라고 테스트 것 때문에, IS NULL NOT 불가능하다. 대신, NOT으로 전체 표현식을 부정. 짜잔.

    여기와 여기 설명서에서 자세한 내용.

    형태의 표현 :

    CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
    

    우아하고 덜 중요한 제한과 같은 달성 것이다 : 연속 식의 검사가 어떤 열이 작동하는 동안 오직 매칭 데이터 형식의 열에 대해 작동한다.

  2. ==============================

    2.당신은이에 대한 CHECK 제약 조건을 사용할 수 있습니다. 뭔가 같은 :

    당신은이에 대한 CHECK 제약 조건을 사용할 수 있습니다. 뭔가 같은 :

    CHECK (email is not null OR phone is not null)
    

    제약 조건에 대한 세부 사항은 여기에서 찾을 수 있습니다

  3. from https://stackoverflow.com/questions/21021102/not-null-constraint-over-a-set-of-columns by cc-by-sa and MIT license