1 of 30

Including Constraints

10

Copyright © Oracle Corporation, 2001. All rights reserved.

10-1

Copyright © Oracle Corporation, 2001. All rights reserved.

2 of 30

Objectives

After completing this lesson, you should be able to

do the following:

  • Describe constraints
  • Create and maintain constraints

10-2

Copyright © Oracle Corporation, 2001. All rights reserved.

3 of 30

What are Constraints?

  • Constraints enforce rules at the table level.
  • Constraints prevent the deletion of a table if there are dependencies.
  • The following constraint types are valid:
    • NOT NULL
    • UNIQUE
    • PRIMARY KEY
    • FOREIGN KEY
    • CHECK

10-3

Copyright © Oracle Corporation, 2001. All rights reserved.

4 of 30

Constraint Guidelines

  • Name a constraint or the Oracle server generates a name by using the SYS_Cn format.
  • Create a constraint either:
    • At the same time as the table is created, or
    • After the table has been created
  • Define a constraint at the column or table level.
  • View a constraint in the data dictionary.

10-4

Copyright © Oracle Corporation, 2001. All rights reserved.

5 of 30

Defining Constraints

CREATE TABLE [schema.]table

(column datatype [DEFAULT expr]

[column_constraint],

...

[table_constraint][,...]);

CREATE TABLE employees(

employee_id NUMBER(6),

first_name VARCHAR2(20),

...

job_id VARCHAR2(10) NOT NULL,

CONSTRAINT emp_emp_id_pk

PRIMARY KEY (EMPLOYEE_ID));

10-5

Copyright © Oracle Corporation, 2001. All rights reserved.

6 of 30

Defining Constraints

  • Column constraint level��
  • Table constraint level

column [CONSTRAINT constraint_name] constraint_type,

column,...

[CONSTRAINT constraint_name] constraint_type

(column, ...),

10-6

Copyright © Oracle Corporation, 2001. All rights reserved.

7 of 30

The NOT NULL Constraint

Ensures that null values are not permitted for the

column:

NOT NULL constraint

(No row can contain�a null value for�this column.)

Absence of NOT NULL constraint

(Any row can contain�null for this column.)

NOT NULL

constraint

10-7

Copyright © Oracle Corporation, 2001. All rights reserved.

8 of 30

The NOT NULL Constraint

Is defined at the column level:

CREATE TABLE employees(

employee_id NUMBER(6),

last_name VARCHAR2(25) NOT NULL,

salary NUMBER(8,2),

commission_pct NUMBER(2,2),

hire_date DATE

CONSTRAINT emp_hire_date_nn

NOT NULL,

...

System

named

User

named

10-8

Copyright © Oracle Corporation, 2001. All rights reserved.

9 of 30

The UNIQUE Constraint

EMPLOYEES

UNIQUE constraint

INSERT INTO

Not allowed: already exists

Allowed

10-9

Copyright © Oracle Corporation, 2001. All rights reserved.

10 of 30

The UNIQUE Constraint

Defined at either the table level or the column level:

CREATE TABLE employees(

employee_id NUMBER(6),

last_name VARCHAR2(25) NOT NULL,

email VARCHAR2(25),

salary NUMBER(8,2),

commission_pct NUMBER(2,2),

hire_date DATE NOT NULL,

...

CONSTRAINT emp_email_uk UNIQUE(email));

10-10

Copyright © Oracle Corporation, 2001. All rights reserved.

11 of 30

The PRIMARY KEY Constraint

DEPARTMENTS

PRIMARY KEY

INSERT INTO

Not allowed

(Null value)

Not allowed

(50 already exists)

10-11

Copyright © Oracle Corporation, 2001. All rights reserved.

12 of 30

The PRIMARY KEY Constraint

Defined at either the table level or the column level:

CREATE TABLE departments(

department_id NUMBER(4),

department_name VARCHAR2(30)

CONSTRAINT dept_name_nn NOT NULL,

manager_id NUMBER(6),

location_id NUMBER(4),

CONSTRAINT dept_id_pk PRIMARY KEY(department_id));

10-12

Copyright © Oracle Corporation, 2001. All rights reserved.

13 of 30

The FOREIGN KEY Constraint

DEPARTMENTS

EMPLOYEES

FOREIGN�KEY

INSERT INTO

Not allowed�(9 does not exist)

Allowed

PRIMARY�KEY

10-13

Copyright © Oracle Corporation, 2001. All rights reserved.

14 of 30

The FOREIGN KEY Constraint

Defined at either the table level or the column level:

CREATE TABLE employees(

employee_id NUMBER(6),

last_name VARCHAR2(25) NOT NULL,

email VARCHAR2(25),

salary NUMBER(8,2),

commission_pct NUMBER(2,2),

hire_date DATE NOT NULL,

...

department_id NUMBER(4),

CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)

REFERENCES departments(department_id),

CONSTRAINT emp_email_uk UNIQUE(email));

10-14

Copyright © Oracle Corporation, 2001. All rights reserved.

15 of 30

FOREIGN KEY Constraint �Keywords

    • FOREIGN KEY: Defines the column in the child table at the table constraint level
    • REFERENCES: Identifies the table and column in the parent table
    • ON DELETE CASCADE: Deletes the dependent rows in the child table when a row in the parent table is deleted.
    • ON DELETE SET NULL: Converts dependent foreign key values to null

10-15

Copyright © Oracle Corporation, 2001. All rights reserved.

16 of 30

The CHECK Constraint

  • Defines a condition that each row must satisfy
  • The following expressions are not allowed:
    • References to CURRVAL, NEXTVAL, LEVEL, and ROWNUM pseudocolumns
    • Calls to SYSDATE, UID, USER, and USERENV functions
    • Queries that refer to other values in other rows

..., salary NUMBER(2)

CONSTRAINT emp_salary_min

CHECK (salary > 0),...

10-16

Copyright © Oracle Corporation, 2001. All rights reserved.

17 of 30

Adding a Constraint Syntax

Use the ALTER TABLE statement to:

  • Add or drop a constraint, but not modify its structure
  • Enable or disable constraints
  • Add a NOT NULL constraint by using the MODIFY clause

ALTER TABLE table

ADD [CONSTRAINT constraint] type (column);

10-17

Copyright © Oracle Corporation, 2001. All rights reserved.

18 of 30

Adding a Constraint

Add a FOREIGN KEY constraint to the EMPLOYEES

table indicating that a manager must already exist as

a valid employee in the EMPLOYEES table.

ALTER TABLE employees

ADD CONSTRAINT emp_manager_fk

FOREIGN KEY(manager_id)

REFERENCES employees(employee_id);

Table altered.

10-18

Copyright © Oracle Corporation, 2001. All rights reserved.

19 of 30

Dropping a Constraint

  • Remove the manager constraint from the EMPLOYEES table.

  • Remove the PRIMARY KEY constraint on the DEPARTMENTS table and drop the associated FOREIGN KEY constraint on the EMPLOYEES.DEPARTMENT_ID column.

ALTER TABLE employees

DROP CONSTRAINT emp_manager_fk;

Table altered.

ALTER TABLE departments

DROP PRIMARY KEY CASCADE;

Table altered.

10-19

Copyright © Oracle Corporation, 2001. All rights reserved.

20 of 30

Disabling Constraints

  • Execute the DISABLE clause of the ALTER TABLE statement to deactivate an integrity constraint.
  • Apply the CASCADE option to disable dependent integrity constraints.

ALTER TABLE employees

DISABLE CONSTRAINT emp_emp_id_pk CASCADE;

Table altered.

10-20

Copyright © Oracle Corporation, 2001. All rights reserved.

21 of 30

Enabling Constraints

  • Activate an integrity constraint currently disabled in the table definition by using the ENABLE clause. ���
  • A UNIQUE or PRIMARY KEY index is automatically created if you enable a UNIQUE key or PRIMARY KEY constraint.

ALTER TABLE employees

ENABLE CONSTRAINT emp_emp_id_pk;

Table altered.

10-21

Copyright © Oracle Corporation, 2001. All rights reserved.

22 of 30

Cascading Constraints

  • The CASCADE CONSTRAINTS clause is used along with the DROP COLUMN clause.
  • The CASCADE CONSTRAINTS clause drops all referential integrity constraints that refer to the primary and unique keys defined on the dropped columns.
  • The CASCADE CONSTRAINTS clause also drops all multicolumn constraints defined on the dropped columns.

10-22

Copyright © Oracle Corporation, 2001. All rights reserved.

23 of 30

Cascading Constraints

Example:

ALTER TABLE test1

DROP (pk) CASCADE CONSTRAINTS;

Table altered.

ALTER TABLE test1

DROP (pk, fk, col1) CASCADE CONSTRAINTS;

Table altered.

10-23

Copyright © Oracle Corporation, 2001. All rights reserved.

24 of 30

Viewing Constraints

Query the USER_CONSTRAINTS table to view all

constraint definitions and names.

SELECT constraint_name, constraint_type,

search_condition

FROM user_constraints

WHERE table_name = 'EMPLOYEES';

10-24

Copyright © Oracle Corporation, 2001. All rights reserved.

25 of 30

Viewing the Columns Associated with Constraints

View the columns associated with the constraint

names in the USER_CONS_COLUMNS view.

SELECT constraint_name, column_name

FROM user_cons_columns

WHERE table_name = 'EMPLOYEES';

10-25

Copyright © Oracle Corporation, 2001. All rights reserved.

26 of 30

Summary

In this lesson, you should have learned how to create

constraints.

  • Types of constraints:
    • NOT NULL
    • UNIQUE
    • PRIMARY KEY
    • FOREIGN KEY
    • CHECK
  • You can query the USER_CONSTRAINTS table to view all constraint definitions and names.

10-26

Copyright © Oracle Corporation, 2001. All rights reserved.

27 of 30

Practice 10 Overview

This practice covers the following topics:

  • Adding constraints to existing tables
  • Adding more columns to a table
  • Displaying information in data dictionary views

10-27

Copyright © Oracle Corporation, 2001. All rights reserved.

28 of 30

10-28

Copyright © Oracle Corporation, 2001. All rights reserved.

29 of 30

10-29

Copyright © Oracle Corporation, 2001. All rights reserved.

30 of 30

10-30

Copyright © Oracle Corporation, 2001. All rights reserved.