SQL NOT NULL Constraint

Summary: this tutorial shows you how to use the SQL NOT NULL constraint to enforce a column from storing NULL values.

Introduction to SQL NOT NULL constraint

The NOT NULL constraint is a column constraint that defines the rule which constrains a column to have non-NULL values only.

It means that when we use the INSERT statement to insert a new row into the table, we have to specify  the values for the NOT NULL columns.

The following statement illustrates the NOT NULL constraint syntax. It enforces the column_name to not accept any NULL values.

CREATE TABLE table_name(
   ...
   column_name data_type NOT NULL,
   ...
);Code language: SQL (Structured Query Language) (sql)

Logically, an NOT NULL constraint is equivalent to a CHECK constraint, therefore, the above statement is equivalent to the following statement.

CREATE TABLE table_name ( 
   ...
   column_name data_type,
   ...
   CHECK (column_name IS NOT NULL)
);Code language: SQL (Structured Query Language) (sql)

For example, the following statement creates the training table that has the taken_date column with the NOT NULL constraint.

CREATE TABLE training (
    employee_id INT,
    course_id INT,
    taken_date DATE NOT NULL,
    PRIMARY KEY (employee_id , course_id)
);Code language: SQL (Structured Query Language) (sql)

Most relational database management systems add the NOT NULL constraint automatically by default to the primary key columns, therefore, we don’t have to specify it explicitly.

The following INSERT statement violates the NOT NULL constraint.

INSERT INTO training(employee_id,course_id)
VALUES(1,1);Code language: SQL (Structured Query Language) (sql)

ALTER TABLE NOT NULL statement

Typically, we define the NOT NULL constraints for columns when we create the table. However, sometimes, we want to change the constraint of a column that accepts a NULL value to not accept a NULL value.

To carry the change, we use these two steps:

First, update all current NULL values to non-NULL values using the UPDATE statement.

UPDATE table_name
SET column_name = 0
WHERE
	column_name IS NULL;Code language: SQL (Structured Query Language) (sql)

Note that we use the IS NULL operator in the WHERE clause to find the rows whose the  column_name is NULL.

Second, add the NOT NULL constraint to the column using the ALTER TABLE statement

ALTER TABLE table_name
MODIFY column_name data_type NOT NULL;Code language: SQL (Structured Query Language) (sql)

Suppose the taken_date column of the training table is NULL and we want to change it to NOT NULL.

First, we update all NULL values in the taken_date column to a specific date e.g., the current date.

UPDATE training
SET taken_date = CURRENT_DATE ()
WHERE
	taken_date IS NULL;Code language: SQL (Structured Query Language) (sql)

Second, we change the take_date column to NOT NULL constraint.

ALTER TABLE training 
MODIFY taken_date date NOT NULL;Code language: SQL (Structured Query Language) (sql)

In this tutorial, we have shown you how to use the NOT NULL constraint to constrain a column to accept only non-NULL values.

Was this tutorial helpful ?