MySQL의 NULL 및 빈 값 차이

5944 단어 mysql
NULL 및 빈 값
NULL은 필드에 NULL 값을 저장하고 빈 값은 필드에 빈 문자(")를 저장합니다.
1. 설치 공간의 차이점
mysql>  select length(NULL), length(''), length('1');
+--------------+------------+-------------+
| length(NULL) | length('') | length('1') |
+--------------+------------+-------------+
| NULL         |          0 |           1 |
+--------------+------------+-------------+
1 row in set

요약: 위에서 보듯이 빈값(')의 길이는 0이고 공간을 차지하지 않는다.의 NULL 길이는 NULL이며, 사실 공간을 차지합니다. 아래 설명을 보십시오.
NULL columns require additional space in the row to record whether their values are NULL.
NULL 열은 값이 NULL인지 여부를 기록하기 위해 행의 추가 공간이 필요합니다.
통속적으로 말하면 빈 값은 진공 회전 컵과 같아서 아무것도 없다. NULL 값은 공기가 가득 찬 컵이다. 보기에는 모두 같지만 본질적인 차이가 있다.
2. 삽입/조회 방식의 차이
테이블 생성tb_test
CREATE TABLE `tb_test` (
  `one` varchar(10) NOT NULL,
  `two` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

유효성 검사를 위해 삽입하기
--      NULL,  
mysql> INSERT tb_test VALUES (NULL,NULL);
1048 - Column 'one' cannot be null
--        ,  
mysql> INSERT tb_test VALUES ('','');
Query OK, 1 row affected

아날로그 데이터:
INSERT tb_test VALUES (1,NULL);
INSERT tb_test VALUES ('',2);
INSERT tb_test VALUES (3,3);

빈 값 필드:
--    is null/is not null
mysql> SELECT * FROM tb_test where one is NULL;
Empty set

mysql> SELECT * FROM tb_test where one is not NULL;
+-----+------+
| one | two  |
+-----+------+
| 1   | NULL |
|     | 2    |
| 3   | 3    |
+-----+------+
3 rows in set
--    = 、!=
mysql> SELECT * FROM tb_test where one = '';
+-----+-----+
| one | two |
+-----+-----+
|     | 2   |
+-----+-----+
1 row in set

mysql> SELECT * FROM tb_test where one != '';
+-----+------+
| one | two  |
+-----+------+
| 1   | NULL |
| 3   | 3    |
+-----+------+
2 rows in set


NULL 값 필드:
--    is null/is not null
mysql> SELECT * FROM tb_test where two is not NULL;
+-----+-----+
| one | two |
+-----+-----+
|     | 2   |
| 3   | 3   |
+-----+-----+
2 rows in set

mysql> SELECT * FROM tb_test where two is NULL;
+-----+------+
| one | two  |
+-----+------+
| 1   | NULL |
+-----+------+
1 row in set

--    = 、!=
mysql> SELECT * FROM tb_test where two = '';
Empty set

mysql> SELECT * FROM tb_test where two != '';
+-----+-----+
| one | two |
+-----+-----+
|     | 2   |
| 3   | 3   |
+-----+-----+
2 rows in set

요약: 단순히 NULL 값열을 찾으려면 is NULL를 사용하고 단순히 빈 값(')을 찾으려면 =''을 사용한다.
권장 쿼리 방법: NULL 값 쿼리는 is null/is not null 쿼리를 사용하고 빈 값(')은 = 또는!=,등산술 연산자.
3. COUNT 및 IFNULL 함수COUNT 함수 사용:
mysql> SELECT count(one) FROM tb_test;
+------------+
| count(one) |
+------------+
|          3 |
+------------+
1 row in set

mysql> SELECT count(two) FROM tb_test;
+------------+
| count(two) |
+------------+
|          2 |
+------------+
1 row in set

mysql> SELECT count(*) FROM tb_test;
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set
IFNULL 함수 사용:
mysql> SELECT IFNULL(one,111111111) from tb_test WHERE one = '';
+-----------------------+
| IFNULL(one,111111111) |
+-----------------------+
|                       |
+-----------------------+
1 row in set

mysql> SELECT IFNULL(two,11111111) from tb_test where two is NULL;
+----------------------+
| IFNULL(two,11111111) |
+----------------------+
| 11111111             |
+----------------------+
1 row in set

요약: COUNT 통계를 사용하면 NULL 값은 필터링되지만 빈 값은 필터링되지 않습니다.
설명: IFNULL에는 두 개의 매개변수가 있습니다.첫 번째 매개변수 필드가 아니면NULL 첫 번째 필드의 값을 반환합니다.그렇지 않으면 함수는 두 번째 매개변수의 값(기본값)을 반환합니다.
4. 색인 필드 설명
인터넷에서 MySql에 NULL이 있으면 이 열을 포함하는 색인은 무효라는 말이 있다.IFNULL 필드와 one 필드에 각각 일반 인덱스를 추가합니다.전에 썼는데 복습에 색인 추가:Mysql 색인 정리 요약
-- ALTER TABLE table_name ADD INDEX index_name(col_name);
ALTER TABLE tb_test ADD INDEX index_oat (one, two);
ALTER TABLE tb_test add INDEX index_two(two);
two 또는 show keys from ;를 사용하여 이 테이블의 모든 색인 정보를 보십시오.
일반 인덱스, 복합 인덱스
복합 인덱스는 질의 기준에 복합 인덱스의 첫 번째 필드가 사용되어야 인덱스가 사용됩니다.따라서 복합 인덱스에서 인덱스 열의 순서가 매우 중요하다.
 
 
 
두 개의 색인이 생성되었고 show indexes from ; NULL 열은 YES입니다.index_tow를 사용하여 설명, EXPLAIN의 사용 설명: Mysql에서 explain 사용법과 결과 필드의 의미 소개EXPLAIN
 
 
 
 
 
 
검색 필드가 색인을 정상적으로 사용할 수 있는 것을 발견했습니다.MYSQL 5.7, InnoDB 엔진을 사용하고 있습니다.인터넷 자료도 보았는데 MySQL에서 NULL이 인덱스에 미친 영향은 이 글에서 예를 들어 검증했다. MySQL은null이 함유된 열에서 인덱스를 사용할 수 있다.
비고: 다른 조건하에서 안 될 수도 있어요. 인터넷 자료를 보면 two를 사용하면 효력을 상실할 수 있다고 해요. 구체적으로 저는 검증을 하지 않았고 공간 인덱스는 사용하지 않았어요.홈페이지create-index-spatial을 조회하면 관심 있는 파트너가 스스로 검증할 수 있습니다.
 
 
 
여기서 나는 많은 문제의 답안이 지정된 조건과 환경에서 비로소 성립되고 질의를 많이 하고 검증을 많이 한다는 것을 생각했다.
요약: 일반 인덱스, 복합 인덱스, 전체 텍스트 인덱스 등 NULL 가치 필드에서 자주 사용하는 인덱스를 사용하면 인덱스가 효력을 상실하지 않습니다.스페이스 인덱스를 홈페이지에서 볼 때 인덱스 열은 NOT NULL이어야 합니다.
03 요약 향상
만약 당신이 위의 몇 가지 측면에서 면접관과 의사소통을 할 수 있다면 그렇게 완벽하게 대답하지 못하더라도'이 두 가지를 다 써 봤는데 구체적으로 어떤 차이가 있는지 모르겠다'는 대답보다 조금 낫다.
1. 빈 값은 공간을 차지하지 않고 NULL 값은 공간을 차지한다.필드가 NULL이 아닌 경우 빈 값을 삽입할 수도 있습니다.
2. IS NOT NULL 또는 IS NULL을 사용할 경우 필드에 NULL이 아닌 필드나 NULL이 없는 필드만 찾을 수 있고 빈 값은 찾을 수 없습니다.
3. NULL은 IS NULL 또는 is not null로 판단하고, SQL 문장 함수에서는 IFNULL() 함수로 처리하며, 빈 문자는 ='또는 <>로 판단한다.
4. count()에서 어떤 열의 기록 수를 통계할 때 NULL 값을 사용하면 다른 시스템에서 자동으로 무시하지만 빈 값은 그 안에 통계된다.
5. MySql 중 한 열에 NULL이 있으면 이 열을 포함하는 색인은 무효입니다.이 구절은 그다지 정확하지 않다.
6: 실제 NULL 값인지 비어 있는지 여부(")인지 실제 비즈니스에 따라 구분합니다.개인은 실제 개발에서 특별한 업무 장면이 없으면 빈 값을 직접 사용할 수 있다고 제안했다.

좋은 웹페이지 즐겨찾기