MySQL 정수 0 대 NULL
정수 열을 사용할 때 다음을 가지는 것이 더 나을까요.0
아니면NULL
값이 없음을 나타냅니다.
예를 들어, 만약 테이블에parent_id
필드와 특정 항목에 부모가 없습니다.0
아니면NULL
?
나는 예전에 항상 사용했습니다.0
, 제가 자바 세계에서 왔기 때문에 (1.5 이전에는) 정수는 항상 값을 가져야 했습니다.
저는 주로 실적과 관련하여 묻고 있는데, 어떤 것이 "더 정확한" 옵션인지 크게 걱정하지 않습니다.
사용.NULL
다음 두 가지 이유로 사용하는 것이 경우
NULL
필드에 값이 없다는 의미로 사용되며, 이것이 바로 모델링하려는 것입니다.- 나중에 참조 무결성 제약 조건을 추가하기로 결정한 경우 다음을 사용해야 합니다.
NULL
.
가능한 경우 열을 NOT NULL로 선언합니다.인덱스를 보다 효율적으로 사용하고 각 값이 NULL인지 여부를 테스트하는 오버헤드를 제거하여 SQL 작업을 보다 빠르게 수행할 수 있습니다. 또한 열당 1비트씩 스토리지 공간도 절약할 수 있습니다.테이블에 NULL 값이 필요한 경우 사용합니다.모든 열에서 NULL 값을 허용하는 기본 설정을 피하면 됩니다.
"no value"에 NULL을 사용하는 것은 말 그대로 정확합니다.0은 정수에 대한 값이므로 의미가 있습니다.NULL ooth는 말 그대로 아무것도 없기 때문에 값이 없다는 뜻입니다.
성능은 무관할 수 있지만 NULL을 올바르게 사용하여 코딩하는 방법을 배운다면 NULL을 사용하는 것이 다소 빠를 수 있습니다.
parent_id에서 예제 0은 'root'을 의미하므로 완벽하게 유효합니다.대부분의 경우 논리적으로 'no value'를 선택하는 경우 NULL이 더 좋습니다.
하지만 제가 알고 있는 성능에는 영향이 없습니다.
당신은 이것과 실생활 수행의 차이를 기대해서는 안 됩니다.
UNIQUE( id1, id2 )
예를 들어 다음을 허용하므로 null 값과 함께 작동하지 않습니다.1, null
두번이라.
반면에 0을 사용한다면,JOIN atable ON this.extID = atable.ID
조인이 실행되고(그 결과 조인된 행이 없음) NULL은 무시됩니다.
어쨌든 빈 값이 NULL과 다른 의미를 갖지 않는 한 항상 NULL 대신 "빈 값"(예: 0 또는 빈 문자열)을 사용하는 것을 제안합니다.
그리고 나는 다음과 같이 쿼리를 수정합니다.JOIN atable ON this.extID = atable.id AND extID > 0
쓸모없는 조인을 실행할 수 없게 하는 것입니다.
실제로 0이 값으로 사용될 것으로 예상하지 않는다면 NULL 대신 0을 사용할 수 있다고 생각합니다.
예를 들어 당신의 칼럼은 외국어 키입니다.외래 키는 보통 0으로 시작하는 것이 아니라 1로 시작하기 때문에 0이 값으로 사용되는 것을 기대하지 않는다는 것을 의미합니다.
그런 다음 0을 사용하여 '아니오' 값 상태를 나타낼 수 있습니다.조인에 사용하면 다른 테이블의 열과 일치하지 않습니다.따라서 NULL과 동일한 효과를 갖습니다.
하지만 0이 실제로 의미를 가지는 열이 있다면요.예를 들어 수량 필드와 같습니다.그리고 그 외에도, 여러분은 또한 가치를 표현하고 비워야 합니다.예를 들어, 아직 수량이 입력되지 않았다는 것을 나타내기 위해서입니다.그럼 그것을 위해서 NULL이 필요합니다.
그게 말이 되기를 바랍니다.
0
는 여전히 정수 열에 유효한 값입니다.다를 .NULL
해당 열에 null을 허용합니다.
integer
만 열을 다를 할 수 .-1
위해서no
치.
의 예를 ,parent_id
:0
, ID 로 ID 로 .0
.
0을 선호하는 경우 Foreign 키를 사용할 수 없습니다. ID가 0인 Mysql 항목에 저장할 수 없으므로(기본인 경우), 가능한 유일한 방법은 null입니다.
언급URL : https://stackoverflow.com/questions/5015990/mysql-integer-0-vs-null
'programing' 카테고리의 다른 글
Google Chrome -- Chrome Beta 8에 대해 파일 접근 허용이 비활성화되었습니다. (0) | 2023.10.16 |
---|---|
tmpfile() 경로 검색 (0) | 2023.10.16 |
Word press로 카테고리 대신 페이지 사용 (0) | 2023.10.16 |
angularjsgMeta 제목 설명이 Google에 의해 크롤링되지 않습니다. (0) | 2023.10.16 |
NuGet: PowerShell 또는 CMD를 통해 모든 프로젝트의 특정 버전으로 패키지 업데이트 (0) | 2023.10.16 |