CREATE TABLE v11
Name
CREATE TABLE
-- define a new table.
Synopsis
where column_constraint
is:
and table_constraint
is:
Description
CREATE TABLE
will create a new, initially empty table in the current database. The table will be owned by the user issuing the command.
If a schema name is given (for example, CREATE TABLE myschema.mytable ...
) then the table is created in the specified schema. Otherwise it is created in the current schema. Temporary tables exist in a special schema, so a schema name may not be given when creating a temporary table. The table name must be distinct from the name of any other table, sequence, index, or view in the same schema.
CREATE TABLE
also automatically creates a data type that represents the composite type corresponding to one row of the table. Therefore, tables cannot have the same name as any existing data type in the same schema.
A table cannot have more than 1600 columns. (In practice, the effective limit is lower because of tuple-length constraints).
The optional constraint clauses specify constraints (or tests) that new or updated rows must satisfy for an insert or update operation to succeed. A constraint is an SQL object that helps define the set of valid values in the table in various ways.
There are two ways to define constraints: table constraints and column constraints. A column constraint is defined as part of a column definition. A table constraint definition is not tied to a particular column, and it can encompass more than one column. Every column constraint can also be written as a table constraint; a column constraint is only a notational convenience if the constraint only affects one column.
Parameters
GLOBAL TEMPORARY
If specified, the table is created as a temporary table. Temporary tables are automatically dropped at the end of a session, or optionally at the end of the current transaction (see ON COMMIT
below). Existing permanent tables with the same name are not visible to the current session while the temporary table exists, unless they are referenced with schema-qualified names. In addition, temporary tables are not visible outside the session in which it was created. (This aspect of global temporary tables is not compatible with Oracle databases.) Any indexes created on a temporary table are automatically temporary as well.
UNLOGGED
If specified, the table is created as an unlogged table. The data written to unlogged tables is not written to the write-ahead log (WAL), making them faster than an ordinary table. Indexes created on an unlogged table are automatically unlogged. The contents of an unlogged table are not replicated to a standby server. The unlogged table is automatically truncated after a crash or shutdown.
table_name
The name (optionally schema-qualified) of the table to be created.
column_name
The name of a column to be created in the new table.
data_type
The data type of the column. This may include array specifiers. For more information on the data types included with Advanced Server, refer to Data Types of Database Compatibility for Oracle Developers Reference Guide.
DEFAULT default_expr
The DEFAULT
clause assigns a default data value for the column whose column definition it appears within. The value is any variable-free expression (subqueries and cross-references to other columns in the current table are not allowed). The data type of the default expression must match the data type of the column.
The default expression will be used in any insert operation that does not specify a value for the column. If there is no default for a column, then the default is null
.
CONSTRAINT constraint_name
An optional name for a column or table constraint. If not specified, the system generates a name.
NOT NULL
The column is not allowed to contain null values.
NULL
The column is allowed to contain null values. This is the default.
This clause is only available for compatibility with non-standard SQL databases. Its use is discouraged in new applications.
UNIQUE
- column constraint
UNIQUE (column_name [, ...] )
- table constraint
The UNIQUE
constraint specifies that a group of one or more distinct columns of a table may contain only unique values. The behavior of the unique table constraint is the same as that for column constraints, with the additional capability to span multiple columns.
For the purpose of a unique constraint, null values are not considered equal.
Each unique table constraint must name a set of columns that is different from the set of columns named by any other unique or primary key constraint defined for the table. (Otherwise it would just be the same constraint listed twice.)
PRIMARY KEY
- column constraint
PRIMARY KEY ( column_name [, ...] )
- table constraint
The primary key constraint specifies that a column or columns of a table may contain only unique (non-duplicate), non-null values. Technically, PRIMARY KEY
is merely a combination of UNIQUE
and NOT NULL
, but identifying a set of columns as primary key also provides metadata about the design of the schema, as a primary key implies that other tables may rely on this set of columns as a unique identifier for rows.
Only one primary key can be specified for a table, whether as a column constraint or a table constraint.
The primary key constraint should name a set of columns that is different from other sets of columns named by any unique constraint defined for the same table.
CHECK (expression)
The CHECK
clause specifies an expression producing a Boolean result which new or updated rows must satisfy for an insert or update operation to succeed. Expressions evaluating to TRUE or “unknown” succeed. Should any row of an insert or update operation produce a FALSE result an error exception is raised and the insert or update does not alter the database. A check constraint specified as a column constraint should reference that column’s value only, while an expression appearing in a table constraint may reference multiple columns.
Currently, CHECK
expressions cannot contain subqueries nor refer to variables other than columns of the current row.
REFERENCES
reftable [ ( refcolumn
) ] [ ON DELETE action
] - column constraint
FOREIGN KEY ( column [, ...] ) REFERENCES reftable [ ( refcolumn [, ...] ) ] [ ON DELETE action ]
- table constraint
These clauses specify a foreign key constraint, which requires that a group of one or more columns of the new table must only contain values that match values in the referenced column(s) of some row of the referenced table. If refcolumn
is omitted, the primary key of the reftable
is used. The referenced columns must be the columns of a unique or primary key constraint in the referenced table.
In addition, when the data in the referenced columns is changed, certain actions are performed on the data in this table’s columns. The ON DELETE
clause specifies the action to perform when a referenced row in the referenced table is being deleted. Referential actions cannot be deferred even if the constraint is deferrable. Here are the following possible actions for each clause:
CASCADE
Delete any rows referencing the deleted row, or update the value of the referencing column to the new value of the referenced column, respectively.
SET NULL
Set the referencing column(s) to
NULL
.If the referenced column(s) are changed frequently, it may be wise to add an index to the foreign key column so that referential actions associated with the foreign key column can be performed more efficiently.
DEFERRABLE
NOT DEFERRABLE
This controls whether the constraint can be deferred. A constraint that is not deferrable will be checked immediately after every command. Checking of constraints that are deferrable may be postponed until the end of the transaction (using the SET CONSTRAINTS
command). NOT DEFERRABLE
is the default. Only foreign key constraints currently accept this clause. All other constraint types are not deferrable.
INITIALLY IMMEDIATE
INITIALLY DEFERRED
If a constraint is deferrable, this clause specifies the default time to check the constraint. If the constraint is INITIALLY IMMEDIATE
, it is checked after each statement. This is the default. If the constraint is INITIALLY DEFERRED
, it is checked only at the end of the transaction. The constraint check time can be altered with the SET CONSTRAINTS
command.
WITH ( ROWIDS [= value ] )
The ROWIDS
option for a table include value
equals to TRUE/ON/1
or FALSE/OFF/0
. When set to TRUE/ON/1
, a ROWID
column is created in the new table. ROWID
is an auto-incrementing value based on a sequence that starts with 1
and assigned to each row of a table. If a value is not specified then the default value is always TRUE
.
By default, a unique index is created on a ROWID
column. The ALTER
and DROP
operations are restricted on a ROWID
column.
ON COMMIT
The behavior of temporary tables at the end of a transaction block can be controlled using ON COMMIT
. The two options are:
PRESERVE ROWS
No special action is taken at the ends of transactions. This is the default behavior. (Note that this aspect is not compatible with Oracle databases. The Oracle default is
DELETE ROWS
.)DELETE ROWS
All rows in the temporary table will be deleted at the end of each transaction block. Essentially, an automatic
TRUNCATE
is done at each commit.
TABLESPACE tablespace
The tablespace
is the name of the tablespace in which the new table is to be created. If not specified, default tablespace
is used, or the database’s default tablespace if default_tablespace
is an empty string.
USING INDEX TABLESPACE tablespace
This clause allows selection of the tablespace in which the index associated with a UNIQUE
or PRIMARY KEY
constraint will be created. If not specified, default tablespace
is used, or the database’s default tablespace if default_tablespace
is an empty string.
Notes
Advanced Server automatically creates an index for each unique constraint and primary key constraint to enforce the uniqueness. Thus, it is not necessary to create an explicit index for primary key columns. (See CREATE INDEX
for more information.)
Examples
Create table dept
and table emp
:
Define a unique table constraint for the table dept
. Unique table constraints can be defined on one or more columns of the table.
Define a check column constraint:
Define a check table constraint:
Define a primary key table constraint for the table jobhist
. Primary key table constraints can be defined on one or more columns of the table.
This assigns a literal constant default value for the column, job
and makes the default value of hiredate
be the date at which the row is inserted.
Create table dept
in tablespace diskvol1
:
See Also