Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

NOT NULL 제약 조건이 있는 MySQL 테이블의 문자형 열에 NULL 키워드를 값으로 삽입하는 방법

NOT NULL 제약 조건이 설정된 문자형 열에도 'NULL' 키워드를 값으로 삽입하는 것은 충분히 가능합니다. 그 이유는 작은따옴표로 묶여 삽입된 'NULL'은 실제 NULL 값이 아니라 하나의 문자열 값으로 취급되기 때문입니다. 즉, NOT NULL 제약 조건은 "값이 없는 상태"만 금지하므로, 'NULL'이라는 문자열 자체는 유효한 값이 됩니다.

예제

문자형 열 'Name'에 NOT NULL 제약 조건이 걸려 있는 test2 테이블이 있다고 가정해 보겠습니다. 아래와 같이 DESCRIBE 문을 통해 제약 조건을 확인할 수 있습니다.

mysql> Describe test2\G
*************************** 1. row ***************************
  Field: id
   Type: int(11)
   Null: NO
    Key:
Default: NULL
  Extra:
*************************** 2. row ***************************
  Field: NAME
   Type: varchar(20)
   Null: NO
    Key:
Default: NULL
  Extra:
2 rows in set (0.03 sec) 

이제 다음 쿼리를 사용하여 'Name' 열에 'NULL'을 값으로 삽입할 수 있습니다.

mysql> Insert into test2 values(2, 'NULL');
Query OK, 1 row affected (0.06 sec)

mysql> select * from test2;
+----+--------+
| id | NAME   |
+----+--------+
|  1 | Gaurav |
|  2 | NULL   |
+----+--------+
2 rows in set (0.00 sec) 

실제 NULL과 '값으로서의 NULL'의 차이

작은따옴표 없이 사용한 NULL은 "값이 없음"을 나타내는 키워드이고, 작은따옴표로 묶인 'NULL'은 단순한 문자열입니다. 이 둘의 차이를 확인하기 위해 다음 두 쿼리를 실행해 보겠습니다.

mysql> delete from test2 where name IS NULL;
Query OK, 0 rows affected (0.00 sec) 

위 쿼리는 0개의 행에 영향을 미쳤습니다. 이는 테이블에 실제 NULL 값을 가진 행이 없다는 의미입니다. SELECT 쿼리로 확인해 보면 어떠한 행도 삭제되지 않았음을 알 수 있습니다.

mysql> select * from test2;
+----+--------+
| id | NAME   |
+----+--------+
|  1 | Gaurav |
|  2 | NULL   |
+----+--------+
2 rows in set (0.00 sec)

mysql> delete from test2 where name = 'NULL';
Query OK, 1 row affected (0.09 sec) 

반면 위 쿼리는 1개의 행에 영향을 미쳤습니다. 이는 'NULL'이라는 문자열을 값으로 가진 행이 실제로 존재한다는 뜻입니다. SELECT 쿼리로 확인해 보면 'NAME' 열에 'NULL'이라는 문자열 값을 가졌던 행이 삭제되었음을 알 수 있습니다.

mysql> select * from test2;
+----+--------+
| id | NAME   |
+----+--------+
|  1 | Gaurav |
+----+--------+
1 row in set (0.00 sec)

정리하면, NOT NULL 제약 조건이 있어도 작은따옴표로 묶은 'NULL'은 문자열 값이므로 정상적으로 삽입됩니다. 반대로 따옴표 없이 NULL을 삽입하려고 하면 NOT NULL 제약 조건 위반으로 오류가 발생한다는 점을 기억해 두시기 바랍니다.