Jump to content

Check constraint

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by 210.212.49.12 (talk) at 07:04, 28 February 2008. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

A check constraint (also known as table check constraint) is a condition that defines valid data when adding or updating an entry in a table of a relational database. A check constraint is applied to each row in the table. The constraint must be a predicate. It can refer to a single or multiple columns of the table. The result of the predicate can be either TRUE, FALSE, or UNKNOWN, depending on the presence of NULLs. If the predicate evaluates to UNKNOWN, then the constraint is not violated and the row can be inserted or updated in the table. This is contrary to predicates in WHERE clauses in SELECT or UPDATE statements.

For example, in a table containing products, one could add a check constraint such that the price of a product and quantity of a product is a non-negative value:

 PRICE >= 0
 QUANTITY >= 0

If these constraints were not in place, it would be possible to have a negative price (-$30) or quantity (-3 items).

Check constraints are used to ensure the validity of data in a database and to provide data integrity. If they are used at the database level, applications that use the database will not be able to add invalid data or modify valid data so the data becomes invalid, even if the application itself accepts invalid data.

Definition

Each check constraint has to be defined in the CREATE TABLE or ALTER TABLE statement using the syntax:

 CREATE TABLE table_name (
    ...,
    CONSTRAINT constraint_name CHECK ( predicate ),
    ...
 )
 ALTER TABLE table_name
    ADD CONSTRAINT constraint_name CHECK ( predicate )

If the check constraint refers to a single column only, it is possibly to specify the constraint as part of the column definition.

 CREATE TABLE table_name (
    ...
    column_name type CHECK ( predicate ),
    ...
 )

NOT NULL Constraint

A NOT NULL constraint is functionally equivalent to the following check constraint with an IS NOT NULL predicate:

 CHECK (column IS NOT NULL)

Some relational database management systems are able to optimize performance when the NOT NULL constraint syntax is used as opposed to the CHECK constraint syntax given above.[1]

Common Restrictions

Most database management systems restrict check constraints to a single row. References to data stored in other tables is not allowed. At most constants and deterministic functions (that do not refer to other tables) are supported. Such constraints are not truly table check constraints but rather row check constraints. Triggers can be used to work around this restriction.

References

  1. ^ PostgreSQL 8.3devel Documentation, Chapter 5. Data Definition, Section 5.3.2. Not-Null Constraints, Website: http://developer.postgresql.org/pgdocs/postgres/ddl-constraints.html, Accessed on May 5, 2007