9.8. CREATE TABLE Statement
9.8.1. Syntax
base_table_def: CREATE TABLE new_table_name '(' base_table_element_commalist ')' | CREATE TABLE new_table_name as query_exp opt_with_data base_table_element_commalist: base_table_element | base_table_element_commalist ',' base_table_element base_table_element: column_def | table_constraint_def column_def: column column_data_type column_def_opt_list opt_referential_triggered_action: /* empty */ | referential_rule | referential_rule referential_rule referential_rule: ON UPDATE referential_action | delete_referential_rule delete_referential_rule: ON DELETE_L referential_action opt_on_delete_referential_rule: /* empty */ | delete_referential_rule referential_action: CASCADE | SET NULLX | SET DEFAULT references: REFERENCES q_table_name opt_column_commalist opt_referential_triggered_action column_def_opt_list: /* empty */ | column_def_opt_list column_def_opt identity_opt: START_L WITH signed_literal | INCREMENT_L BY INTNUM identity_opt_list: identity_opt | identity_opt_list ',' identity_opt column_def_opt: NOT NULLX | NULLX | IDENTITY | IDENTITY '(' identity_opt_list ')' | PRIMARY KEY | DEFAULT signed_literal | COLLATE q_table_name | references | IDENTIFIED BY column | CHECK '(' search_condition ')' | WITH SCHEMA column_xml_schema_def | UNIQUE table_constraint_def: UNDER q_table_name | opt_constraint_name PRIMARY KEY '(' index_column_commalist ')' opt_index_option_list | opt_constraint_name FOREIGN KEY '(' column_commalist ')' references | opt_constraint_name CHECK '(' search_condition ')' | opt_constraint_name UNIQUE '(' column_commalist ')' opt_constraint_name: /* empty */ | CONSTRAINT identifier column_commalist: column | column_commalist ',' column index_column_commalist: column opt_asc_desc | index_column_commalist ',' column opt_asc_desc index_option: CLUSTERED | UNIQUE | OBJECT_ID index_option_list: index_option | index_option_list index_option opt_index_option_list: /* empty */ | index_option_list column_xml_schema_def : '(' STRING ',' STRING ')' | '(' STRING ',' STRING ',' STRING ')' opt_with_data : /* empty */ | WITH DATA | WITHOUT DATA
The CREATE TABLE statement creates a new table. The table is identified by a new_table_name, which consists of an optional qualifier, an optional owner and the name. If the qualifier is not supplied then it defaults to the current qualifier, and likewise if the table owner is not specified then this will default to the login name of the user issuing the statement.
Following the new_table_name is a list of table elements that are either column definitions or table constraints. A column must have a unique name within the table and possible super tables. The only necessary attribute of a column is a data type.
The UNDER q_table_name constraint specifies an optional supertable. The table being created will inherit all columns, indices, constraints from the supertable, specifically including the primary key. Hence the under and primary key constraints cannot be specified together. If the table being created will be owned by a non-dba user, the supertable must be owned by the same user.
The AS query_exp opt_with_data causes the table to be created based on the compile time types of columns of the SELECT expression query_exp. If WITH DATA is specified then the resultset returned by the query_exp is fed into the new table. Otherwise (if WITHOUT DATA or not specified) only the table is created.