두 개의 외부 키가 동시에 NULL이 되지 않도록 합니다.
MySQL/MariaDB에서 두 개의 외부 키가 암호화되지 않도록 하려면 어떻게 해야 합니까?NULL동시에?이건 처음에 꽤 간단한 것 같은데, 나는 그것을 사용했어.CREATE다음과 같은 문 제약 조건:
CREATE TABLE `Table` (
`foo_id` INT UNSIGNED UNIQUE DEFAULT NULL,
`bar_id` INT UNSIGNED UNIQUE DEFAULT NULL,
CONSTRAINT `CHECK_keys_present` CHECK (
((`foo_id` IS NOT NULL) OR (`bar_id` IS NOT NULL)) != FALSE
),
FOREIGN KEY (`foo_id`) REFERENCES `Foo` (`foo_id`) ON UPDATE CASCADE ON DELETE SET NULL,
FOREIGN KEY (`bar_id`) REFERENCES `Bar` (`bar_id`) ON UPDATE CASCADE ON DELETE SET NULL
);
이 솔루션은 열의 값을 수동으로 업데이트하면 작동합니다.foo_id그리고.bar_id이 경우 컬럼은 다음 값이 되지 않습니다.NULL동시에.그러나 테이블에서 행을 삭제할 때Foo또는Bar(다음으로 외부 키의 값을NULL이 때문에ON UPDATE(조항) 제약사항CHECK_keys_present트리거되지 않습니다.
또, 이 기능을 사용해 본 적이 있습니다.BEFORE UPDATE방아쇠를 당겼지만 이것들도 효과가 없는 것 같습니다.
MariaDB 버전 10.4.8을 사용하고 있습니다.
그리고 이상한 것도 써봤는데((`foo_id` IS NOT NULL) OR (`bar_id` IS NOT NULL)) != FALSE구성, 왜냐하면(`foo_id` IS NOT NULL) OR (`bar_id` IS NOT NULL)동작하지 않았다.
이것은 완전한 답은 아닙니다.왜냐하면 저는 특정 레퍼런스를 찾지 못했기 때문입니다.check제약.단, MariaDB는 외부 키 캐스케이드에 트리거를 강제하지 않습니다.
트리거에는 다음과 같은 제한이 적용됩니다.
. . . - 트리거는 외부 키 액션에 의해 활성화되지 않습니다.
라고 추측할 수 있다check제약조건은 동일한 범주에 속합니다.
이는 캐스케이드된 외부 키 제약으로는 원하는 작업을 수행할 수 없음을 의미합니다.
FOREIGN KEYs,TRIGGERs,CHECK기본적인 기능밖에 없습니다.애플리케이션 코드 또는 스토어드 프로시저에서 보다 복잡한 작업을 수행해야 합니다.
언급URL : https://stackoverflow.com/questions/58719070/preventing-two-foreign-keys-to-be-null-at-the-same-time
'programing' 카테고리의 다른 글
| 테스트 클래스에 대해서만 비공개 방법을 공개하기 위한 주석 (0) | 2022.11.02 |
|---|---|
| 호스트 경로 볼륨이 있는 kubernetes 포드 내에서 mariadb가 크래시함 (0) | 2022.11.02 |
| 인터넷 연결이 오프라인 상태임을 감지하시겠습니까? (0) | 2022.11.02 |
| MariaDB가 시스템 표준 시간대를 선택하도록 하려면 어떻게 해야 합니까? (0) | 2022.11.02 |
| 열 이름을 가져오기 위한 MySQL 쿼리입니까? (0) | 2022.11.02 |