[Naver 지식인] MSSQL 의 NULL 과 C#의 NULL 의 차이

개발 노트/지식 In  2012.09.11 11:35



 

안녕하세요 개발자 명월입니다.

 

지식인 질문 내용입니다.

 

 

http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040102&docId=158168826

 

답변 내용입니다.

 

안녕하세요 개발자 명월이라고 합니다.

 

데이터 베이스랑 C# 언어의 체계 부터 설명 들어갑니다.

 

데이터 베이스는 파일시스템의 기반으로 물론 인덱스를 사용할때는 메모리를 사용하긴 하지만 기본적으론 값이 파일시스템이죠. 즉 Null을 하나의 값으로 인정하는 것입니다.

무슨 말이냐 Null 이 비어있다라는 하나의 값으로 인정 되는 겁니다.

예를 들면 unique 과 foreign key 를 사용할때 보이지만

unique 일때 딱 하나의 Null 값이 들어갑니다. foreign key 로 연결될때도 null 값으로 참조가 됩니다.

즉 null은 비어있다 라는 값으로 인정하는 것 입니다.

 

C# 은 값을 어디에다 넣냐하면 메모리에 넣습니다.

예를 들어 클래스 하나 선언한다고 가정한다면

Form test = new Form();

이라고 생각할때

Form test 는 stack 에 값을 넣는 것 이지만 new Form은 힙에 선언을 하는 것이지요.

이 부분은 클래스와 구조체를 깊이 공부하면 알수 있지만 stack 에 모든 값을 넣을 수 없습니다.

뭐 물론 힙도 한정이 되어있지만 stack은 정말 한정이 되어있기 때문에 마구마구 쓸어다 쓰면 성능 저하가 일어나지요..

 

이 말인 즉슨 NULL 이란 말은

Form test = NULL 은

Stack에는 선언이 되었으나 힙에는 주소로 연결된 값이 선언된적이 없다라는 뜻으로 사용되는 것입니다.

 

일반 자료형 int a = null; 이런 구분은 에러가 납니다. 기본적으로 스택에 박히는 값이니

null이라는 말이 맞지 않습니다.

 

제 블로그에 예제 소스 넣어 놓겠습니다.

 

예제 내용입니다.

 

 

 

 

보시는 바와 같이 null 값이 insert 가 됩니다.

 

아래와 같이 한번더 insert를 하면,

 

 

 

null 값이 중복된 값이라고 에러를 뱉어 냅니다..

즉 MSSQL 에서는 null을 하나의 값으로 인정하는 것 입니다.

 

 

위에 보이는 바와 같이 null를 넣으면 개체 참조가 설정되지 않았다고 에러를 뱉어 냅니다.

즉, 설정이 되지 않았다는 뜻이지요... 말 그대로 값이 없는 것 입니다.


댓글 1개가 달렸습니다.
댓글쓰기
  1. 나그네
    2015.07.30 16:45 신고 |  수정/삭제  댓글쓰기

    DB의 Null 값을 C#에서 비교 하고 싶다면

    DBNull.Value 를 사용하시면 됩니다^^

    ex) if(DB == DBNull.Value)