MySQL 에서 null 값 에 대한 작은 질문

3270 단어 MySQLnull 값
오늘 null 값 을 테스트 할 때 작은 문 제 를 발 견 했 습 니 다.여기에 기록 되 어 있 습 니 다.여러분 이 이전에 만난 적 이 있 는 지 모 르 겠 습 니 다.
    일의 발전 은 이 렇 습 니 다.한 표 의 수 치 를 걸 러 낼 때 age=2 의 열 을 제거 한 다음 에 나머지 열 정 보 를 확인 해 야 합 니 다.이 조작 은 비교적 간단 해 보 입 니 다.저 는 하나의 표 로 과정 을 모 의 해 보 겠 습 니 다.

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `age` int(11) DEFAULT NULL,
  `score` varchar(20) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `idx_score` (`score`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
  표 구 조 는 위 와 같 습 니 다.그 중에서 id 와 score 는 not null 의 제한 을 가 했 고 age 필드 는 이 제약 을 추가 하지 않 았 습 니 다.그 다음 에 우 리 는 먼저 일부 데 이 터 를 삽입 합 니 다.다음 과 같 습 니 다.

mysql:yeyztest 23:32:57>>select * from test;
+----+------+-------+
| id | age  | score |
+----+------+-------+
|  1 |    1 | 5     |
|  2 |    2 | 10    |
|  5 |    5 | 25    |
|  8 |    8 | 40    |
|  9 |    2 | 45    |
| 10 |    5 | 50    |
| 11 |    8 | 55    |
+----+------+-------+
7 rows in set (0.00 sec)
   현재 이 그룹의 데 이 터 는 전량 입 니 다.필드 마다 값 이 있 습 니 다.그리고 우 리 는 아래 의 SQL 문 구 를 사용 하여 기록 을 조회 합 니 다.

select * from test where id != 2;
우 리 는 결 과 를 살 펴 보 았 다.

mysql:yeyztest 23:33:14>>select * from test where age!=2;
+----+------+-------+
| id | age  | score |
+----+------+-------+
|  1 |    1 | 5     |
|  5 |    5 | 25    |
|  8 |    8 | 40    |
| 10 |    5 | 50    |
| 11 |    8 | 55    |
+----+------+-------+
5 rows in set (0.00 sec)
이때 우 리 는 두 개의 기록 을 삽입 합 니 다.

mysql:yeyztest 23:33:17>>insert into test (id,score) values (12,60);
Query OK, 1 row affected (0.00 sec)

mysql:yeyztest 23:34:02>>insert into test (id,score) values (13,65);
Query OK, 1 row affected (0.00 sec)

mysql:yeyztest 23:34:10>>select * from test;
+----+------+-------+
| id | age  | score |
+----+------+-------+
|  1 |    1 | 5     |
|  2 |    2 | 10    |
|  5 |    5 | 25    |
|  8 |    8 | 40    |
|  9 |    2 | 45    |
| 10 |    5 | 50    |
| 11 |    8 | 55    |
| 12 | NULL | 60    |
| 13 | NULL | 65    |
+----+------+-------+
9 rows in set (0.00 sec)
위의 문 구 를 다시 사용 하여 조회 하면 결 과 는 다음 과 같다.

mysql:yeyztest 23:34:15>>select * from test where age!=2;
+----+------+-------+
| id | age  | score |
+----+------+-------+
|  1 |    1 | 5     |
|  5 |    5 | 25    |
|  8 |    8 | 40    |
| 10 |    5 | 50    |
| 11 |    8 | 55    |
+----+------+-------+
5 rows in set (0.00 sec)
   즉,기록 에 null 값 이 포함 되 어 있 을 때 역방향 매 칭 age 를 사용 합 니 다!=2.전체 조회 결 과 를 얻 을 수 없 는데 이것 은 우리 의 기대 에 부합 되 지 않 는 다.
   사실 이 문 제 는 이전 글 에서 말 한 적 이 있 습 니 다.바로 하나의 데이터 기록 에 있 습 니 다.null 값 필드 는 일반적인 필드 와 함께 저장 되 지 않 습 니 다.null 값 필드 는 null 값 목록 에 저 장 됩 니 다.그래서 검색 할 때 일치 하지 않 는 현상 을 초래 했 습 니 다.이것 은 비교적 중요 한 점 입 니 다.여러분 에 게 유용 하 기 를 바 랍 니 다.
   테스트 환경 은 5.7.16 버 전의 MySQL 입 니 다.
이상 은 MySQL 에서 null 값 에 관 한 작은 문제 에 대한 상세 한 내용 입 니 다.MySQL null 값 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기