MySQL에서 외래 키를 사용할 때 원본 값이 0이면 ID가 0 인 대상 레코드가 없으므로 오류가 발생합니다. 따라서 원본 열을 NULL로 변경하고 작동합니다. 그러나 이것이 올바른 방법인지 확실하지 않습니다. 그것은 올바른 방법인가요, 아니면 어떻게 든 소스 ID를 NULL 대신 0으로 유지할 수 있습니까?0이 될 수있는 외래 키
답변
외래 키는 제약 조건입니다. 즉, 외래 키가있는 열의 값이 아무것도 설정되지 않고 ("anything"이 NULL
을 포함하지 않는 경우) 해당 값이 참조 된 테이블에 존재해야합니다. 그렇지 않으면 MySQL에서 오류가 발생합니다.
0
을 포함하여 당신이 원하는 무엇이든 할 수있는 값을 설정하거나 참조 된 테이블에
0
에 레코드를 추가,
NULL
에 값을 설정할 수 있습니다. 이 옵션 중
NULL
값을 설정하는 것이 가장 깨끗하게 보입니다.
예, 올바른 방법입니다. FK의 핵심은 참조 된 ID가있는 레코드가 실제로 존재하도록하는 것입니다. 따라서 FK 열을 0으로 설정하면 ID가 0 인 레코드가 있어야합니다.
유일한 방법은 FK 열을 NULLable로 만드는 것입니다.
어쨌든 왜 FK 열을 0으로 설정 하시겠습니까? SQL에 "존재하지 않음"에 대한 표준 값은 NULL입니다.
올바른 방법입니다. 0은 값이고 null은 열에 아무것도 없음을 나타냅니다.
NULL을 사용하면 두 가지 이유로 0보다 낫습니다. 첫째, 그것은 "특별한"값이라는 것을 분명히합니다 (테이블 생성 ID가 항상 자동으로 생성 된 ID에서는 true이지만 테이블 0은 항상 0이 아니어야합니다). 둘째로 외래 키 제약 조건으로 SQL에서 작동합니다.
당신이하는 일은 일반적인 관행입니다. 많은 사람들은 NULL 값을 "누락 값"이라고하는 마커로 사용하며, 이는 SQL의 외래 키 제약 조건에서 기대하는 것입니다.
누락 된 값을 처리하는 다른 방법은 다 대다 관계에서와 같이 두 클래스 사이에 연결이있는 경우에만 항목이있는 세 번째 "연결"테이블을 사용하는 것입니다. 이것은 NULL에 대한 필요성을 피할 수 있으며 일부 데이터베이스 순수 주의자가 선호하지만 모든 것을보다 복잡하게 만듭니다. 자세한 내용은 Nullable Foreign Key bad practice?을 참조하십시오.
- 1. -0이 될 수있는 PHP 계산이 있습니까?
- 2. Mysql 외래 키 딜레마
- 3. 외래 키 : 외래 키 제약
- 4. MySQL 외래 외래 키
- 5. 조건이있는 PostgreSQL 외래 키
- 6. 외래 키 열이 NULL 일 수있는 쿼리
- 7. 숫자가 너무 작아 져서 0이 될 수있는 숫자를 처리하는 방법
- 8. 외래 키
- 9. 외래 키
- 10. 외래 키
- 11. 인덱싱 및 외래 키
- 12. 는 Mongoid "외래 키"
- 13. 복제의 Postgresql 외래 키
- 14. 중복 외래 키 삭제
- 15. Django : 다른 외래 키
- 16. 외래 키 복합 기본 키
- 17. 외래 키 참조하는 기술 키
- 18. 주 키 외래 키 문제
- 19. 외래 키 제약 문제
- 20. Django - Fixtures의 외래 키
- 21. 외래 키 (RI)
- 22. 이 외래 키
- 23. 다른 테이블의 외래 키
- 24. MYSQL에서 외래 키 조작
- 25. CakePHP의 저장 외래 키
- 26. 외래 키 길이 JPA
- 27. : 외래 키 속성이
- 28. SQL의 외래 키 제약
- 29. SQL 외래 키 테이블
- 30. 템플릿의 장고 외래 키
'0'또는 'NULL'인 경우 어떤 차이가 있습니까? 논리적 관점에서 볼 때 '0'은 단순히 의미가 없습니다. – Jon