Using DDL Statements to Create and Manage Tables
Using DDL Statements
to Create and Manage Tables
Copyright © 2004, Oracle. All rights reserved.
Objectives
After completing this lesson, you should be
able to do the following:
Categorize the main database objects
Review the table structure
List the data types that are available for columns
Create a simple table
Understand how constraints are created at the
time of table creation
Describe how schema objects work
Database Objects
Object
Description
Table
Basic unit of storage; composed of rows
View
Logically represents subsets of data from
one or more tables
Sequence
Generates numeric values
Index
Improves the performance of some
queries
Synonym
Gives alternative names to objects
Naming Rules
Table names and column names:
Must begin with a letter
Must be 1–30 characters long
Must contain only A–Z, a–z, 0–9, _, $, and #
Must not duplicate the name of another
object owned by the same user
Must not be an Oracle server reserved word
CREATE TABLE Statement
You must have:
CREATE TABLE privilege
A storage area
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr][, ...]);
You specify:
Table name
Column name, column data type, and column size
Referencing Another User’s Tables
Tables belonging to other users are not in
the user’s schema.
You should use the owner’s name as a prefi
to those tables.
USERA
USERB
SELECT *
FROM userB.employees;
SELECT *
FROM userA.employees;
DEFAULT Option
Specify a default value for a column during an insert.
... hire_date DATE DEFAULT SYSDATE, ...
Literal values, eipressions, or SQL functions are legal
values.
Another column’s name or a pseudocolumn are
illegal values.
The default data type must match the column data
type.
CREATE TABLE hire_dates
(id
NUMBER(8),
hire_date DATE DEFAULT SYSDATE);
Table created.
Creating Tables
Create the table.
CREATE TABLE dept
(deptno
dname
loc
create_date
Table created.
NUMBER(2),
VARCHAR2(14),
VARCHAR2(13),
DATE DEFAULT SYSDATE);
Confrm table creation.
DESCRIBE dept
Data Types
Data Type
Description
VARCHAR2(size) Variable-length character data
CHAR(size)
Fixed-length character data
NUMBER(p,s)
Variable-length numeric data
DATE
Date and time values
LONG
Variable-length character data (up to 2 GB)
CLOB
Character data (up to 4 GB)
RAW and LONG
RAW
Raw binary data
BLOB
Binary data (up to 4 GB)
BFILE
Binary data stored in an external file (up to 4 GB)
ROWID
A base-64 number system representing the unique
address of a row in its table
Datetime Data Types
You can use several datetime data types:
Data Type
Description
TIMESTAMP
Date with fractional seconds
INTERVAL YEAR TO
MONTH
Stored as an interval of years
and months
INTERVAL DAY TO
SECOND
Stored as an interval of days, hours,
minutes, and seconds
Datetime Data Types
The TIMESTAMP data type is an eitension of
the DATE data type.
It stores the year, month, and day of the DATE
data type plus hour, minute, and second
values as well as the fractional second value.
You can optionally specify the time zone.
TIMESTAMP[(fractional_seconds_precision)]
TIMESTAMP[(fractional_seconds_precision)]
WITH TIME ZONE
TIMESTAMP[(fractional_seconds_precision)]
WITH LOCAL TIME ZONE
Datetime Data Types
The INTERVAL YEAR TO MONTH data type
stores a period of time using the YEAR and
MONTH datetime felds:
INTERVAL YEAR [(year_precision)] TO MONTH
The INTERVAL DAY TO SECOND data type
stores a period of time in terms of days,
hours, minutes, and seconds:
INTERVAL DAY [(day_precision)]
TO SECOND [(fractional_seconds_precision)]
Including 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
Constraint Guidelines
You can name a constraint, or the Oracle server
generates a name by using the SYS_Cn format.
Create a constraint at either of the following
times:
At the same time as the table is created
After the table has been created
Defne a constraint at the column or table level.
View a constraint in the data dictionary.
Defning Constraints
Syntai:
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);
Column-level constraint:
column [CONSTRAINT constraint_name] constraint_type,
Table-level constraint:
column,...
[CONSTRAINT constraint_name] constraint_type
(column, ...),
Defning Constraints
Column-level constraint:
CREATE TABLE employees(
employee_id NUMBER(6)
CONSTRAINT emp_emp_id_pk PRIMARY KEY,
first_name
VARCHAR2(20),
...);
Table-level 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));
1
2
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.)
NOT NULL
constraint
Absence of NOT NULL
constraint
(Any row can contain a
null value for this
column.)
UNIQUE Constraint
UNIQUE constraint
EMPLOYEES
…
INSERT INTO
Allowed
Not allowed:
already exists
UNIQUE Constraint
Defned 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));
PRIMARY KEY Constraint
DEPARTMENTS
PRIMARY KEY
…
Not allowed
(null value)
Not allowed
(50 already exists)
INSERT INTO
FOREIGN KEY Constraint
DEPARTMENTS
PRIMARY
KEY
…
EMPLOYEES
FOREIGN
KEY
…
INSERT INTO
Not allowed
(9 does not
exist)
Allowed
FOREIGN KEY Constraint
Defned 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));
FOREIGN KEY Constraint:
Keywords
FOREIGN KEY: Defnes the column in the
child table at the table-constraint level
REFERENCES: Identifes 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
CHECK Constraint
Defnes a condition that each row must satisfy
The following eipressions 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),...
CREATE TABLE: Example
CREATE TABLE employees
( employee_id
NUMBER(6)
CONSTRAINT
emp_employee_id
, first_name
VARCHAR2(20)
, last_name
VARCHAR2(25)
CONSTRAINT
emp_last_name_nn
, email
VARCHAR2(25)
CONSTRAINT
emp_email_nn
CONSTRAINT
emp_email_uk
, phone_number
VARCHAR2(20)
, hire_date
DATE
CONSTRAINT
emp_hire_date_nn
, job_id
VARCHAR2(10)
CONSTRAINT
emp_job_nn
, salary
NUMBER(8,2)
CONSTRAINT
emp_salary_ck
, commission_pct NUMBER(2,2)
, manager_id
NUMBER(6)
, department_id NUMBER(4)
CONSTRAINT
emp_dept_fk
departments (department_id));
PRIMARY KEY
NOT NULL
NOT NULL
UNIQUE
NOT NULL
NOT NULL
CHECK (salary>0)
REFERENCES
Violating Constraints
UPDATE employees
SET
department_id = 55
WHERE department_id = 110;
UPDATE employees
*
ERROR at line 1:
ORA-02291: integrity constraint (HR.EMP_DEPT_FK)
violated - parent key not found
Department 55 does not eiist.
Violating Constraints
You cannot delete a row that contains a
primary key that is used as a foreign key in
another table.
DELETE FROM departments
WHERE
department_id = 60;
DELETE FROM departments
*
ERROR at line 1:
ORA-02292: integrity constraint (HR.EMP_DEPT_FK)
violated - child record found
Creating a Table
by Using a Subquery
Create a table and insert rows by combining
the CREATE TABLE statement and the AS
subquery option.
CREATE TABLE table
[(column, column...)]
AS subquery;
Match the number of specifed columns to
the number of subquery columns.
Defne columns with column names and
default values.
Creating a Table
by Using a Subquery
CREATE TABLE dept80
AS
SELECT employee_id, last_name,
salary*12 ANNSAL,
hire_date
FROM
employees
WHERE
department_id = 80;
Table created.
DESCRIBE dept80
ALTER TABLE Statement
Use the ALTER TABLE statement to:
Add a new column
Modify an eiisting column
Defne a default value for the new column
Drop a column
Dropping a Table
All data and structure in the table are deleted.
Any pending transactions are committed.
All indeies are dropped.
All constraints are dropped.
You cannot roll back the DROP TABLE statement.
DROP TABLE dept80;
Table dropped.
Summary
In this lesson, you should have learned how
to use the CREATE TABLE statement to
create a table and include constraints.
Categorize the main database objects
Review the table structure
List the data types that are available for columns
Create a simple table
Understand how constraints are created at the
time of table creation
Describe how schema objects work
Practice 9: Overview
This practice covers the following topics:
Creating new tables
Creating a new table by using the CREATE
TABLE AS syntai
Verifying that tables eiist
Dropping tables
to Create and Manage Tables
Copyright © 2004, Oracle. All rights reserved.
Objectives
After completing this lesson, you should be
able to do the following:
Categorize the main database objects
Review the table structure
List the data types that are available for columns
Create a simple table
Understand how constraints are created at the
time of table creation
Describe how schema objects work
Database Objects
Object
Description
Table
Basic unit of storage; composed of rows
View
Logically represents subsets of data from
one or more tables
Sequence
Generates numeric values
Index
Improves the performance of some
queries
Synonym
Gives alternative names to objects
Naming Rules
Table names and column names:
Must begin with a letter
Must be 1–30 characters long
Must contain only A–Z, a–z, 0–9, _, $, and #
Must not duplicate the name of another
object owned by the same user
Must not be an Oracle server reserved word
CREATE TABLE Statement
You must have:
CREATE TABLE privilege
A storage area
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr][, ...]);
You specify:
Table name
Column name, column data type, and column size
Referencing Another User’s Tables
Tables belonging to other users are not in
the user’s schema.
You should use the owner’s name as a prefi
to those tables.
USERA
USERB
SELECT *
FROM userB.employees;
SELECT *
FROM userA.employees;
DEFAULT Option
Specify a default value for a column during an insert.
... hire_date DATE DEFAULT SYSDATE, ...
Literal values, eipressions, or SQL functions are legal
values.
Another column’s name or a pseudocolumn are
illegal values.
The default data type must match the column data
type.
CREATE TABLE hire_dates
(id
NUMBER(8),
hire_date DATE DEFAULT SYSDATE);
Table created.
Creating Tables
Create the table.
CREATE TABLE dept
(deptno
dname
loc
create_date
Table created.
NUMBER(2),
VARCHAR2(14),
VARCHAR2(13),
DATE DEFAULT SYSDATE);
Confrm table creation.
DESCRIBE dept
Data Types
Data Type
Description
VARCHAR2(size) Variable-length character data
CHAR(size)
Fixed-length character data
NUMBER(p,s)
Variable-length numeric data
DATE
Date and time values
LONG
Variable-length character data (up to 2 GB)
CLOB
Character data (up to 4 GB)
RAW and LONG
RAW
Raw binary data
BLOB
Binary data (up to 4 GB)
BFILE
Binary data stored in an external file (up to 4 GB)
ROWID
A base-64 number system representing the unique
address of a row in its table
Datetime Data Types
You can use several datetime data types:
Data Type
Description
TIMESTAMP
Date with fractional seconds
INTERVAL YEAR TO
MONTH
Stored as an interval of years
and months
INTERVAL DAY TO
SECOND
Stored as an interval of days, hours,
minutes, and seconds
Datetime Data Types
The TIMESTAMP data type is an eitension of
the DATE data type.
It stores the year, month, and day of the DATE
data type plus hour, minute, and second
values as well as the fractional second value.
You can optionally specify the time zone.
TIMESTAMP[(fractional_seconds_precision)]
TIMESTAMP[(fractional_seconds_precision)]
WITH TIME ZONE
TIMESTAMP[(fractional_seconds_precision)]
WITH LOCAL TIME ZONE
Datetime Data Types
The INTERVAL YEAR TO MONTH data type
stores a period of time using the YEAR and
MONTH datetime felds:
INTERVAL YEAR [(year_precision)] TO MONTH
The INTERVAL DAY TO SECOND data type
stores a period of time in terms of days,
hours, minutes, and seconds:
INTERVAL DAY [(day_precision)]
TO SECOND [(fractional_seconds_precision)]
Including 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
Constraint Guidelines
You can name a constraint, or the Oracle server
generates a name by using the SYS_Cn format.
Create a constraint at either of the following
times:
At the same time as the table is created
After the table has been created
Defne a constraint at the column or table level.
View a constraint in the data dictionary.
Defning Constraints
Syntai:
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);
Column-level constraint:
column [CONSTRAINT constraint_name] constraint_type,
Table-level constraint:
column,...
[CONSTRAINT constraint_name] constraint_type
(column, ...),
Defning Constraints
Column-level constraint:
CREATE TABLE employees(
employee_id NUMBER(6)
CONSTRAINT emp_emp_id_pk PRIMARY KEY,
first_name
VARCHAR2(20),
...);
Table-level 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));
1
2
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.)
NOT NULL
constraint
Absence of NOT NULL
constraint
(Any row can contain a
null value for this
column.)
UNIQUE Constraint
UNIQUE constraint
EMPLOYEES
…
INSERT INTO
Allowed
Not allowed:
already exists
UNIQUE Constraint
Defned at either the table level or the column
level:
CREATE TABLE employees(
employee_id
NUMBER(6),
last_name
VARCHAR2(25) NOT NULL,
VARCHAR2(25),
salary
NUMBER(8,2),
commission_pct
NUMBER(2,2),
hire_date
DATE NOT NULL,
...
CONSTRAINT emp_email_uk UNIQUE(email));
PRIMARY KEY Constraint
DEPARTMENTS
PRIMARY KEY
…
Not allowed
(null value)
Not allowed
(50 already exists)
INSERT INTO
FOREIGN KEY Constraint
DEPARTMENTS
PRIMARY
KEY
…
EMPLOYEES
FOREIGN
KEY
…
INSERT INTO
Not allowed
(9 does not
exist)
Allowed
FOREIGN KEY Constraint
Defned at either the table level or the column
level:
CREATE TABLE employees(
employee_id
NUMBER(6),
last_name
VARCHAR2(25) NOT NULL,
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));
FOREIGN KEY Constraint:
Keywords
FOREIGN KEY: Defnes the column in the
child table at the table-constraint level
REFERENCES: Identifes 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
CHECK Constraint
Defnes a condition that each row must satisfy
The following eipressions 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),...
CREATE TABLE: Example
CREATE TABLE employees
( employee_id
NUMBER(6)
CONSTRAINT
emp_employee_id
, first_name
VARCHAR2(20)
, last_name
VARCHAR2(25)
CONSTRAINT
emp_last_name_nn
VARCHAR2(25)
CONSTRAINT
emp_email_nn
CONSTRAINT
emp_email_uk
, phone_number
VARCHAR2(20)
, hire_date
DATE
CONSTRAINT
emp_hire_date_nn
, job_id
VARCHAR2(10)
CONSTRAINT
emp_job_nn
, salary
NUMBER(8,2)
CONSTRAINT
emp_salary_ck
, commission_pct NUMBER(2,2)
, manager_id
NUMBER(6)
, department_id NUMBER(4)
CONSTRAINT
emp_dept_fk
departments (department_id));
PRIMARY KEY
NOT NULL
NOT NULL
UNIQUE
NOT NULL
NOT NULL
CHECK (salary>0)
REFERENCES
Violating Constraints
UPDATE employees
SET
department_id = 55
WHERE department_id = 110;
UPDATE employees
*
ERROR at line 1:
ORA-02291: integrity constraint (HR.EMP_DEPT_FK)
violated - parent key not found
Department 55 does not eiist.
Violating Constraints
You cannot delete a row that contains a
primary key that is used as a foreign key in
another table.
DELETE FROM departments
WHERE
department_id = 60;
DELETE FROM departments
*
ERROR at line 1:
ORA-02292: integrity constraint (HR.EMP_DEPT_FK)
violated - child record found
Creating a Table
by Using a Subquery
Create a table and insert rows by combining
the CREATE TABLE statement and the AS
subquery option.
CREATE TABLE table
[(column, column...)]
AS subquery;
Match the number of specifed columns to
the number of subquery columns.
Defne columns with column names and
default values.
Creating a Table
by Using a Subquery
CREATE TABLE dept80
AS
SELECT employee_id, last_name,
salary*12 ANNSAL,
hire_date
FROM
employees
WHERE
department_id = 80;
Table created.
DESCRIBE dept80
ALTER TABLE Statement
Use the ALTER TABLE statement to:
Add a new column
Modify an eiisting column
Defne a default value for the new column
Drop a column
Dropping a Table
All data and structure in the table are deleted.
Any pending transactions are committed.
All indeies are dropped.
All constraints are dropped.
You cannot roll back the DROP TABLE statement.
DROP TABLE dept80;
Table dropped.
Summary
In this lesson, you should have learned how
to use the CREATE TABLE statement to
create a table and include constraints.
Categorize the main database objects
Review the table structure
List the data types that are available for columns
Create a simple table
Understand how constraints are created at the
time of table creation
Describe how schema objects work
Practice 9: Overview
This practice covers the following topics:
Creating new tables
Creating a new table by using the CREATE
TABLE AS syntai
Verifying that tables eiist
Dropping tables