programing

테이블에 열을 하나의 'true' 값만 허용하고 다른 모든 행은 'false'여야 합니다.

padding 2023. 9. 20. 20:10
반응형

테이블에 열을 하나의 'true' 값만 허용하고 다른 모든 행은 'false'여야 합니다.

MySQL에서는 데이터베이스 레벨에서 아래와 같은 제한을 둘 수 있습니까?

1. 특정 열은 'true' 또는 'false' 값만 가질 수 있습니다. 2. 그리고 정확히 하나의 행만 'true' 값을 가져야 합니까?

테이블에 부울 특성이 있는 대신 하나의 행을 포함하고 참이라고 간주되는 원래 테이블의 행을 가리키는 다른 테이블을 가질 수 있습니다.

True 값을 변경하는 것은 TrueRow 테이블에서 외부 키를 업데이트하는 것입니다.

MySQL에서 고유 인덱스는 다음을 무시합니다.NULL가치.그래서 당신이 사용할 수 있는 약간의 해킹이 있습니다.

nullable을 추가하는 것을 고려해 볼 수 있습니다.bit열(1 또는 0 값만 가질 수 있음):

ALTER TABLE mytable 
  ADD COLUMN `is_default` BIT NULL,
  ADD UNIQUE INDEX `is_default_UNIQUE` (`is_default` ASC);

이때 한 행은 1(TRUE)이 될 수 있으며, TRUE인 다른 행을 추가하려고 하면 오류가 발생합니다.

1062: Duplicate entry '\x01' for key 'is_default_UNIQUE'

유일한 문제점은 모든 다른 행이 다음 행이어야 한다는 것입니다.NULL또한 고유 값으로 간주되므로 false가 될 수 없습니다.

Example table data

(이것은 실제로 인덱스를 사용하기 위한 것이 아닙니다.)

  1. 특정 열은 'true' 또는 'false' 값만 취할 수 있습니다.

    열에 데이터 유형 사용boolean아니면tiny-int

2 그리고 정확히 하나의 행만 'true' 값을 가져야 합니까?

true로 설정한 열을 제외한 모든 행 열을 false로 업데이트하는 쿼리를 작성해야 합니다.

열의 데이터 유형을 "boolean"으로 설정한 다음 업데이트 시 항상 "true"가 될 행을 true로 설정하는 트리거 함수를 추가합니다.

언급URL : https://stackoverflow.com/questions/3228161/could-i-make-a-column-in-a-table-only-allows-one-true-value-and-all-other-rows

반응형