MySQL의 NULL 및 빈 값 차이
5944 단어 mysql
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 값인지 비어 있는지 여부(")인지 실제 비즈니스에 따라 구분합니다.개인은 실제 개발에서 특별한 업무 장면이 없으면 빈 값을 직접 사용할 수 있다고 제안했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.