programing

MySQL NULL 또는 NOT NULL 그게 질문입니까?

topblog 2023. 8. 21. 19:25
반응형

MySQL NULL 또는 NOT NULL 그게 질문입니까?

NULL과 NOT NULL의 차이점은 무엇입니까? 그리고 그것들은 언제 사용되어야 합니까?

NULL은 필드에 값을 제공할 필요가 없음을 의미합니다.

NOT NULL은 필드에 값을 입력해야 함을 의미합니다.

예를 들어 시스템에 대해 등록된 사용자의 테이블을 작성하는 경우 user-id에 항상 값(즉, NULL이 아님)이 입력되어 있는지 확인할 수 있지만 선택적 배우자 이름 필드는 비워둘 수 있습니다(NULL).

제가 제안하고 싶습니다

  • 가능한 경우 모든 필드에 NULL을 사용하지 마십시오.
  • null일 수 있는 합리적인 이유가 있는 경우 NULL을 사용합니다.

NULL null에 대해 의미 있는 의미가 없는 필드가 있으면 null이 실수로 입력될 때 버그가 발생할 수 있습니다.NOT NULL을 사용하면 이를 방지할 수 있습니다.

NULL 필드의 가장 일반적인 이유는 "0 또는 1" 관계에 대한 옵션인 외부 키 필드가 있기 때문입니다.

많은 열이 NULL일 수 있는 테이블이 있고 반대 패턴처럼 들리기 시작하는 경우 수직 분할이 응용 프로그램 컨텍스트에서 더 의미가 있는지 고려하십시오.

NULL에는 또 다른 유용한 용도가 있습니다. 인덱스의 모든 열을 NULL로 설정하면 해당 행에 대해 인덱스 레코드가 생성되는 것을 중지하여 인덱스를 최적화합니다. 행의 매우 작은 하위 집합(예:1%만 설정된 "활성" 플래그의 경우) - 일반적으로 NULL인 열로 시작하는 인덱스를 만들면 공간이 절약되고 해당 인덱스가 최적화됩니다.

NULL과 NOT NULL의 차이점은 무엇입니까?

▁either▁▁column▁using▁the▁when▁option합다▁you니▁or▁specify▁need▁to테▁table▁to,▁adding▁a이▁a▁column▁creating▁table▁a값을 사용하여 열 값 옵션을 지정해야 합니다.NULL또는NOT NULL.NOT NULL열에 다음 값을 가질 수 없음을 의미합니다.NULL레코드에 값; 모든기대한값NULL은 단입니다.NULL열에 외부 키 제약 조건이 있는 경우에도 허용되는 값입니다. ㅠㅠNULL값이 아닙니다. 데이터베이스 테이블에 열이 있어야 하기 때문에 테이블 내의 모든 레코드에 대해 열 인스턴스가 있어야 하기 때문에 옵션이라고 부르는 이유를 알 수 있습니다.

그리고 그것들은 언제 사용되어야 합니까?

그것은 당신의 비즈니스 규칙에 따라 결정됩니다.
한 한 NOT NULL데이터가 항상 존재하는지 확인하기 위해 사용됩니다.

NOT NULL열이 다음을 가질 수 없음을 의미합니다.NULL값 - 대신 해당 열에 대한 행을 삽입할 때 아무 것도 지정하지 않으면 지정된 기본값(또는 기본값이 지정되지 않은 경우 해당 유형에 대한 MySQL의 기본값)을 사용합니다.

이 아닌NOT NULL잠재적으로 가치를 가질 수 있습니다.NULL(기본적으로 결측값/결측값/지정되지 않은 값을 의미합니다.)NULL는 일반 값과 다르게 작동합니다. 자세한 내용은 여기를 참조하십시오.

사람들이했듯이, 다른사람대답이듯했이들,이듯▁as대,NOT NULL 말해서 단하게는순라는 입니다.NULL허용되는 값이 아닙니다.빈 " " " " " " " " 라는수 .''(의 경우)varchar) 또는0(의 경우)int등), 등.

시한 지좋기 은능가를 할 때 한 NOT NULL 열값동 습가 오 발 경 을 수 할 생 경 나 류 잊 버린 우 어 을INSERT((으)로 NOT NULL에 에열없이 .DEFAULT)


허용하는 주요 딸꾹질NULL▁be▁is다▁never▁with로 절대 찾을 수 입니다.<>(비등) 연산자입니다.를 들어,과 같은 예들어를 하면 다과같은이 됩니다.categorys

Desktops
Mobiles
NULL -- probably embedded devices

=는 예상대로 합니다.

select * from myTable where category="Desktops";

하만지그, 그.<> 자가모항제외니다합을 합니다.NULLentries

select * from myTable where category<>"Mobiles";
-- returns only desktops, embedded devices were not returned

이는 특히 열에 오류가 없는 경우 미묘한 버그의 원인이 될 수 있습니다.NULL하지만 나중에 일부 데이터를 테스트할 수 있습니다.NULL후속 개발로 인해 값이 추가됩니다.을 이한이유모열든다설을정다니로 설정했습니다.NOT NULL.


지만도, 그은이될다있수니습움하것을 허용하는 것은 도움이 될 수 있습니다.NULL - " 용사시"를 할 때 사용합니다.UNIQUE KEY/INDEX일반적으로 고유 키를 사용하려면 열(또는 열 조합)이 전체 테이블에 대해 고유해야 합니다.고유 키는 데이터베이스가 적용하는 강력한 보호 기능입니다.

경우에 따라 대부분의 행에 대해 보호 기능을 사용할 수 있지만 예외도 있습니다.

그 한 열에의에 ,UNIQUE KEY이라NULL그러면 해당 행에 대해 고유성이 더 이상 적용되지 않습니다.분명히 이것은 당신이 허락하는 경우에만 효과가 있을 것입니다.NULL위에서 설명한 딸꾹질을 이해하는 것.


이 허락하기로 결정한다면.NULL▁your▁writing,오▁values▁consider보십시를 쓰는 것을 고려해 보세요.<>검출 NULLs의

select * from myTable where category<>"Desktops" or category is null;

NOT NULL열 제약 조건이며 기본 키에 없는 열이 있을 때 사용해야 합니다(기본 키는 본질적으로 비활성화되어 있으므로 말도 안 됩니다).NOT NULL값이 항상 알려져 있기 때문에(알 수 없거나 누락되지 않음) 해당 열에 null이 필요하지 않습니다.

NULL하는 열 조건을 입니다. 를 들어,하는 키워드입니다. 여기서 기본값과 동일함(즉, null이 허용됨)을 의미합니다. 그러나 다른 많은 컨텍스트에서도 발생합니다. 예를 들어, 열에 null을 삽입하는 것과 같은 키워드입니다.INSERT...VALUES진술.

또한 NULL은 NULL 자체가 아니더라도 다른 어떤 것과도 같지 않습니다.

예:

mysql> select if(NULL=NULL, "null=null", "null!=null");
+------------------------------------------+
| if(NULL=NULL, "null=null", "null!=null") |
+------------------------------------------+
| null!=null                               |
+------------------------------------------+
1 row in set (0.00 sec)

NULL의 이 정의는 부분적으로 채워진 열의 고유 키가 필요할 때 매우 유용합니다.이 경우 모든 빈 값을 NULL로 유지하면 NULL!= NULL이므로 고유 키가 위반되지 않습니다.

다음은 어떤 항목이 NULL인지 확인하는 방법의 예입니다.

mysql> select if(null is null, "null is null", "null is not null");
+------------------------------------------------------+
| if(null is null, "null is null", "null is not null") |
+------------------------------------------------------+
| null is null                                         |
+------------------------------------------------------+
1 row in set (0.01 sec)

확실하지 않으면 NOT NULL을 사용합니다.

    일반적인 생각에도 불구하고 NULL이 아닌 경우 모든 필드를 입력해야 하는 것은 아닙니다. 이는 생략하는 항목이 기본값을 갖는다는 것을 의미합니다.아니요, 고통을 의미하지 않습니다.또한 NULL은 인덱싱 측면에서 효율성이 낮으며 쿼리에서 수신한 내용을 처리할 때 많은 에지 케이스 상황을 발생시킵니다.

    따라서 NULL 값은 물론 이론적인 의미가 있지만(희귀한 경우에도 이점을 얻을 수 있음) NULL이 아닌 경우가 대부분입니다.NOT NULL을 사용하면 필드가 변수처럼 작동합니다. 필드에는 항상 값이 있으며 사용자는 이 값이 의미하는지 여부를 결정합니다., 가능모든 값과 단순히 아무것도 없다는 것을 알려주는 추가 값이 필요한 경우에도 NULL을 사용할 수 있습니다.

그럼 그들은 왜 NULL을 그렇게 사랑할까요?

    왜냐하면 그것은 묘사적이기 때문입니다.그것은 의미적인 의미를 가지고 있습니다, "아니, 잠깐, 이것은 단지 빈 문자열이 아닙니다, 이것은 훨씬 더 이국적입니다 - 그것은.정보 부족!"그들은 "시간은 00:00"과 "몇 시인지 매듭짓지 않는다"라고 말하는 것이 어떻게 다른지 설명할 것입니다.그리고 이것은 유효합니다. 이것을 처리하기 위해서는 약간의 추가적인 노력이 필요합니다.시스템은 "가치가 있습니까?"라는 정보를 위해 추가 공간을 할당하고 이를 확인하는 데 지속적으로 어려움을 겪기 때문입니다.그래서 의미론적 아름다움의 작은 부분을 위해, 여러분은 시간과 저장을 희생합니다.많지는 않지만, 그래도.대신 "99:99"라고 말할 수 있었는데, 이는 분명히 잘못된 시간이며 상수를 할당할 수 있습니다. 아니요, 시작도 하지 마세요. 그냥 예시일 뿐입니다.)

    이 모든 현상은 사람들이 존재하지 않는 배열 인덱스를 보고 오류 메시지를 받는 아름다움에 집착하는 오래된 논쟁을 떠올리게 합니다.이것은 완전히 무의미합니다.실용적인 디폴트는 축복입니다. 그들은 "당신은 내가 무슨 말을 하는지 안다"는 스타일로 작업을 단순화하고, 당신은 다른 프로젝트와 4년을 보낸 후에도 더 읽기 쉽고, 더 간결하고, 더 표현력 있는 코드를 작성할 수 있습니다.

필수 NULL

    JOIN이 있는 경우 다른 행에 참여하고 싶지만 해당 행이 없을 때 조만간 NULL이 발생합니다.이것은 NULL 없이는 실제로 살 수 없는 유일한 유효한 사례입니다. 당신은 그것이 단순히 당신이 얻은 빈 레코드가 아니라는 것을 알아야 합니다.전혀 기록이 없습니다.

    그렇지 않으면?NOT NULL은 편리하고 효율적이며 놀랄 일이 적습니다.그 대가로, 그것은 의미적 강제적 장애를 가진 일부 사람들에 의해 무지하고 터무니없는 것으로 불릴 것입니다.(그것은 물건이 아니지만 되어야 합니다.)

TL;DR

가능하면 NULL을 사용하지 않는 것이 좋습니다.
그것은 이상한 일입니다 - 기계에게도 마찬가지입니다.

NULL은 사악합니다!

네, 농담이지만 NULL이 있을 때 쿼리에 심각한 함정이 있습니다.예를 들어 NULL을 값과 비교하거나 SUM을 수행하거나 평균화할 때 COALESCE 또는 ISNULL을 사용해야 합니다. 그렇지 않으면 잘못된 계산이 나와 응용 프로그램에 오류가 발생합니다.또한 COALESCE와 ISNULL은 쿼리 실행에 매우 적은 시간을 추가하며, 대부분의 경우 이 추가 시간은 무시할 수 있지만, 쿼리가 큰 테이블에서 많은 NULL 값을 평가해야 하는 경우에는 합산할 수 있습니다.

언급URL : https://stackoverflow.com/questions/1736096/mysql-null-or-not-null-that-is-the-question

반응형