[SQL]: NULL & NOT NULL
SQL
09/22/2019
NULL
- Null is unknown value or "empty"
- Trigerring NULL
SQL
INSERT INTO dogs(name)VALUES("OSHKOSH");--ORINSERT INTO dogs()VALUES();--CheckSELECT * FROM dogs;- Output:
TEXT
+---------+------+| name | age |+---------+------+| Oshkosh | NULL || NULL | NULL |+---------+------+- Recall:
SQL
SHOW COLUMNS FROM dogs;TEXT
+-------+--------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+--------------+------+-----+---------+-------+| name | varchar(100) | YES | | NULL | || age | int(11) | YES | | NULL | |+-------+--------------+------+-----+---------+-------+- NULL is allowed
NOT_NULL
To prevent above situation where a data is inserted as NULL, we can define each column to NOT NULL
SQL
CREATE TABLE dogs2( name VARCHAR(50) NOT NULL, age INT NOT NULL);SQL
DESC dogs2;- Output:
TEXT
+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| name | varchar(50) | NO | | NULL | || age | int(11) | NO | | NULL | |+-------+-------------+------+-----+---------+-------+Now, try
SQL
INSERT INTO dogs2(name) VALUES("Bunny");INSERT INTO dogs(age) VALUES('17');- Output:
TEXT
mysql> SELECT * FROM dogs2;+-------+-----+| name | age |+-------+-----+| Bunny | 0 || | 17 |+-------+-----+- Now the default value is set to an empty string and 0
Setting a default value
SQL
CREATE TABLE dogs3( name VARCHAR(50) DEFAULT 'noname', age INT DEFAULT -1);Now test:
SQL
INSERT INTO dogs3() VALUES(); -- setting no values for all columnsSELECT * FROM dogs3;- Output:
TEXT
+--------+------+| name | age |+--------+------+| noname | -1 |+--------+------+How about this?
SQL
CREATE TABLE dogs4( name VARCHAR(50) NOT NULL DEFAULT 'noname', age INT NOT NULL DEFAULT -1);- This may seem redundant but it is not
- This prevents inserting/setting NULL to the table
- It will throw an error when NULL is inserted