Understand the concept of NULL. This page explains how NULL represents missing or unknown data and how it interacts with comparison operators and functions.
CREATE TABLE customer (
id INT NOT NULL,
date_of_birth DATE NULL
...
)SELECT NULL = NULL;
+-------------+
| NULL = NULL |
+-------------+
| NULL |
+-------------+
SELECT 99 = NULL;
+-----------+
| 99 = NULL |
+-----------+
| NULL |
+-----------+SELECT 99 <=> NULL, NULL <=> NULL;
+-------------+---------------+
| 99 <=> NULL | NULL <=> NULL |
+-------------+---------------+
| 0 | 1 |
+-------------+---------------+SELECT col1 FROM tab ORDER BY ISNULL(col1), col1;SELECT col1 FROM tab ORDER BY IF(col1 IS NULL, 0, 1), col1 DESC;SELECT IFNULL(1,0);
+-------------+
| IFNULL(1,0) |
+-------------+
| 1 |
+-------------+
SELECT IFNULL(NULL,10);
+-----------------+
| IFNULL(NULL,10) |
+-----------------+
| 10 |
+-----------------+
SELECT COALESCE(NULL,NULL,1);
+-----------------------+
| COALESCE(NULL,NULL,1) |
+-----------------------+
| 1 |
+-----------------------+CREATE TABLE t(x INT);
INSERT INTO t VALUES (1),(9),(NULL);
SELECT SUM(x) FROM t;
+--------+
| SUM(x) |
+--------+
| 10 |
+--------+
SELECT AVG(x) FROM t;
+--------+
| AVG(x) |
+--------+
| 5.0000 |
+--------+SELECT COUNT(x) FROM t;
+----------+
| COUNT(x) |
+----------+
| 2 |
+----------+
SELECT COUNT(*) FROM t;
+----------+
| COUNT(*) |
+----------+
| 3 |
+----------+CREATE TABLE t2(id INT PRIMARY KEY AUTO_INCREMENT, letter CHAR(1));
INSERT INTO t2(letter) VALUES ('a'),('b');
SELECT * FROM t2;
+----+--------+
| id | letter |
+----+--------+
| 1 | a |
| 2 | b |
+----+--------+CREATE TABLE t3 (x INT, ts TIMESTAMP);
INSERT INTO t3(x) VALUES (1),(2);INSERT INTO t3(x) VALUES (3);
SELECT* FROM t3;
+------+---------------------+
| x | ts |
+------+---------------------+
| 1 | 2013-09-05 10:14:18 |
| 2 | 2013-09-05 10:14:18 |
| 3 | 2013-09-05 10:14:29 |
+------+---------------------+CREATE TABLE virt (c INT, v INT AS (c+10) PERSISTENT) ENGINE=InnoDB;
INSERT INTO virt VALUES (1, NULL);
SELECT c, v FROM virt;
+------+------+
| c | v |
+------+------+
| 1 | 11 |
+------+------+CREATE TABLE nulltest (
a INT(11),
x VARCHAR(10) NOT NULL DEFAULT 'a',
y INT(11) NOT NULL DEFAULT 23
);INSERT INTO nulltest (a,x,y) VALUES (1,NULL,NULL);
ERROR 1048 (23000): Column 'x' cannot be nullshow variables like 'sql_mode%';
+---------------+--------------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------------+
| sql_mode | NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------+
INSERT INTO nulltest (a,x,y) VALUES (1,NULL,NULL),(2,NULL,NULL);
Query OK, 2 rows affected, 4 warnings (0.08 sec)
Records: 2 Duplicates: 0 Warnings: 4SELECT * FROM nulltest;
+------+---+---+
| a | x | y |
+------+---+---+
| 1 | | 0 |
| 2 | | 0 |
+------+---+---+IF a=10 THEN NULL; ELSE NULL; END IFSET sql_mode=EMPTY_STRING_IS_NULL;
SELECT '' IS NULL; -- returns TRUE
INSERT INTO t1 VALUES (''); -- inserts NULL