SQL Create Constraints
SQL Create Constraints
Constraints can be specified when the table is created with the CREATE TABLE statement, or after the
table is created with the ALTER TABLE statement.
Syntax
CREATE TABLE table_name (
column1 dataType constraint,
column2 dataType constraint,
column3 dataType constraint …
);
SQL Constraints
SQL constraints are used to specify rules for the data in a table.
Constraints are used to limit the type of data that can go into a table. This ensures the accuracy and
reliability of the data in the table. If there is any violation between the constraint and the data action,
the action is aborted.
Constraints can be column level or table level. Column level constraints apply to a column, and table
level constraints apply to the whole table.
This enforces a field to always contain a value, which means that you cannot insert a new record, or
update a record without adding a value to this field.
SQL NOT NULL on CREATE TABLE
The following SQL ensures that the "ID", "LastName", and "FirstName" columns will NOT accept
NULL values when the "Persons" table is created:
Example
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar (255) NOT NULL,
FirstName varchar (255) NOT NULL,
Age int
);
To create a NOT NULL constraint on the "Age" column when the "Persons" table is already created,
use the following SQL:
My SQL
ALTER TABLE Persons
MODIFY COLUMN Age int NOT NULL;
SQL UNIQUE Constraint
However, you can have many UNIQUE constraints per table, but only one PRIMARY
KEY constraint per table.
The following SQL creates a UNIQUE constraint on the "ID" column when the "Persons" table is
created:
MySQL:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar (255) NOT NULL,
FirstName varchar (255),
Age int,
UNIQUE (ID)
);
MySQL
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT UC_Person UNIQUE (ID,LastName)
);
Primary keys must contain UNIQUE values, and cannot contain NULL values.
A table can have only ONE primary key; and in the table, this primary key can consist of single or
multiple columns (fields).
The following SQL creates a PRIMARY KEY on the "ID" column when the "Persons" table is
created:
MySQL:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar (255) NOT NULL,
FirstName varchar (255),
Age int,
PRIMARY KEY (ID)
);
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar (255) NOT NULL,
FirstName varchar (255),
Age int,
CONSTRAINT PK_Person PRIMARY KEY (ID, LastName)
);
Note: In the example above there is only ONE PRIMARY KEY (PK_Person). However, the
VALUE of the primary key is made up of TWO COLUMNS (ID + LastName).
To create a PRIMARY KEY constraint on the "ID" column when the table is already created, use
the following SQL:
MySQL
ALTER TABLE Persons
ADD PRIMARY KEY (ID);
MySQL
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID, LastName);
Note: If you use ALTER TABLE to add a primary key, the primary key column(s) must have been
declared to not contain NULL values (when the table was first created).
MySQL:
ALTER TABLE Persons
DROP PRIMARY KEY;
SQL FOREIGN KEY Constraint
The FOREIGN KEY constraint is used to prevent actions that would destroy links between tables.
A FOREIGN KEY is a field (or collection of fields) in one table, that refers to the PRIMARY KEY in
another table.
The table with the foreign key is called the child table, and the table with the primary key is called
the referenced or parent table.
Persons Table
1 Hansen Ola 30
2 Svendson Tove 23
3 Pettersen Kari 20
Orders Table
1 77895 3
2 44678 3
3 22456 2
4 24562 1
Notice that the "PersonID" column in the "Orders" table points to the "PersonID" column in the
"Persons" table.
The "PersonID" column in the "Persons" table is the PRIMARY KEY in the "Persons" table.
The "PersonID" column in the "Orders" table is a FOREIGN KEY in the "Orders" table.
The FOREIGN KEY constraint prevents invalid data from being inserted into the foreign key column,
because it has to be one of the values contained in the parent table.
The following SQL creates a FOREIGN KEY on the "PersonID" column when the "Orders" table is
created:
MySQL:
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
MySQL
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
To create a FOREIGN KEY constraint on the "PersonID" column when the "Orders" table is already
created, use the following SQL:
MySQL
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons (PersonID);
MySQL
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons (PersonID);
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
The CHECK constraint is used to limit the value range that can be placed in a column.
If you define a CHECK constraint on a column it will allow only certain values for this column.
If you define a CHECK constraint on a table it can limit the values in certain columns based on
values in other columns in the row.
MySQL:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar (255) NOT NULL,
FirstName varchar (255),
Age int,
CHECK (Age>=18)
);
MySQL
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar (255) NOT NULL,
FirstName varchar (255),
Age int,
City varchar (255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Kigali')
);
To create a CHECK constraint on the "Age" column when the table is already created, use the
following SQL:
MySQL
ALTER TABLE Persons
ADD CHECK (Age>=18);
MySQL
ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Kigali');
DROP a CHECK Constraint
ALTER TABLE Persons
DROP CHECK CHK_PersonAge;
The default value will be added to all new records, if no other value is specified.
The following SQL sets a DEFAULT value for the "City" column when the "Persons" table is
created:
My SQL
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar (255) NOT NULL,
FirstName varchar (255),
Age int,
City varchar (255) DEFAULT 'Sandnes'
);
CREATE TABLE Orders (
ID int NOT NULL,
OrderNumber int NOT NULL,
OrderDate date DEFAULT GETDATE()
);
SQL DEFAULT on ALTER TABLE
To create a DEFAULT constraint on the "City" column when the table is already created, use the
following SQL:
MySQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'Kigali';
MySQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT;