mysql에서 auto_increment 컬럼에 NULL 또는 '' 를 insert 하는 차이가 무엇인가요?

조회수 11170회
예) member_table
no - auto increment,
id - not null,
pw - not null,
email,  
phone,  
address 

$sql1= "INSERT INTO member_table (no ,id, pw, email,phone,address) VALUES (NULL, '$id', '$pw', '$email', '$phone', '$address')";

$sql2 = "INSERT INTO member_table (no ,id, pw, email,phone,address) VALUES ('', '$id', '$pw', '$email', '$phone', '$address')";

$sql3 = "INSERT INTO member_table (id, pw, email,phone,address) VALUES ('$id', '$pw', '$email', '$phone', '$address')";

위의 member_table에 데이터를 넣는다고 할 때, $sql1, $sql2에서 보듯이 auto_increment 컬럼인 no에 NULL을 넣어서 쓰기도 하고 싱클쿼테이션을 넣어서 쓰기도 하는데, 두 가지의 차이점이 무엇인가요?

그리고 한 가지 더 질문을 드리자면 그냥 $sql3와 같이 사용하는 것과 다른 차이가 있나요?

답변 부탁드립니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • MySQL에서는 auto_increment 컬럼을 값을 할당하지 않거나 0을 할당하면 자동으로 sequence number가 할당됩니다. 그리고, 만일 auto_increment 컬럼이 NOT NULL이면 NULL을 할당해도 sequence number가 할당되구요.

    위의 member_table의 경우를 보면

    • no컬럼이 NULLABLE인 경우
    INSERT INTO member_table
    (id, pw, email, phone, address)
    VALUES(1, 'password', 'a@a.com', '010-1111-1111', '주소');
    
    INSERT INTO member_table
    (no, id, pw, email, phone, address)
    VALUES(0, 1, 'password', 'a@a.com', '010-1111-1111', '주소');
    
    • no컬럼이 NOT NULL인 경우
    INSERT INTO member_table
    (no, id, pw, email, phone, address)
    VALUES(NULL, 1, 'password', 'a@a.com', '010-1111-1111', '주소');
    

    언급하신 경우 중 '' (blank)를 넣으면 integer값이 아니라고 에러가 발생합니다. 일반적으로 auto_increment 컬럼에 값을 할당하지 않는 방식을 많이 사용하는 것 같습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 값을 할당하지 않는 방식으로 가는 게 좋겠네요. 답변 감사드립니다^^ 알 수 없는 사용자 2016.4.20 21:50

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)