Creates a new table in the database or on a remote server.
CREATE [ { GLOBAL | LOCAL } TEMPORARY ] TABLE [ IF NOT EXISTS ] [ owner. ]table-name … ( column-definition [ column-constraint ] … [ , column-definition [ column-constraint ] …] [ , table-constraint ] … ) |{ ENABLE | DISABLE } RLV STORE …[ IN dbspace-name ] …[ ON COMMIT { DELETE | PRESERVE } ROWS ] [ AT location-string ] [PARTITION BY range-partitioning-scheme | hash-partitioning-scheme | composite-partitioning-scheme ] column-definition - (back to Syntax) column-name data-type [ [ NOT ] NULL ] [ DEFAULT default-value | IDENTITY ] [ PARTITION | SUBPARTITION ( partition-name IN dbspace-name [ , ... ] ) ] default-value - (back to column-definition) special-value | string | global variable | [ - ] number | ( constant-expression ) | built-in-function( constant-expression ) | AUTOINCREMENT | CURRENT DATABASE | CURRENT REMOTE USER | NULL | TIMESTAMP | LAST USER special-value - (back to default value) CURRENT { DATE | TIME | TIMESTAMP | USER | PUBLISHER } | USER column-constraint - (back to Syntax) [ CONSTRAINT constraint-name ] { { UNIQUE | PRIMARY KEY | REFERENCES table-name [ ( column-name ) ] [ action ] } [ IN dbspace-name ] | CHECK ( condition ) | IQ UNIQUE ( integer ) } table-constraint - (back to Syntax) [ CONSTRAINT constraint-name ] { { UNIQUE ( column-name [ , column-name ] … ) | PRIMARY KEY ( column-name [ , column-name ] … ) } [ IN dbspace-name ] | foreign-key-constraint | CHECK ( condition ) | IQ UNIQUE ( integer ) } foreign-key-constraint - (back to table-constraint) FOREIGN KEY [ role-name ] [ ( column-name [ , column-name ] … ) ] …REFERENCES table-name [ ( column-name [ , column-name ] … ) ] …[ actions ] [ IN dbspace-name ] actions - (back to foreign-key-constraint) [ ON { UPDATE | DELETE } RESTRICT ] location-string - (back to Syntax) or (back to composite-partitioning-scheme) { remote-server-name. [ db-name ].[ owner ].object-name | remote-server-name; [ db-name ]; [ owner ];object-name } range-partitioning-scheme - (back to Syntax) RANGE ( partition-key ) ( range-partition-decl [,range-partition-decl ... ] ) partition-key - (back to range-partitioning-scheme) or (back to hash-partitioning-scheme) column-name range-partition-decl - (back to range-partitioning-scheme) VALUES <= ( {constant-expr | MAX } [ , { constant-expr | MAX }]... ) [ IN dbspace-name ] hash-partitioning-scheme - (back to Syntax) or (back to composite-partitioning-scheme) HASH ( partition-key [ , partition-key, … ] ) composite-partitioning-scheme - (back to Syntax) hash-partitioning-scheme SUBPARTITION range-partitioning-scheme
Specify SYSTEM with this clause to put either a permanent or temporary table in the catalog store. Specify IQ_SYSTEM_TEMP to store temporary user objects (tables, partitions, or table indexes) in IQ_SYSTEM_TEMP or, if the TEMP_DATA_IN_SHARED_TEMP option is set 'ON', and the IQ_SHARED_TEMP dbspace contains RW files, in IQ_SHARED_TEMP. (You cannot specify the IN clause with IQ_SHARED_TEMP.) All other use of the IN clause is ignored. By default, all permanent tables are placed in the main IQ store, and all temporary tables are placed in the temporary IQ store. Global temporary and local temporary tables can never be in the IQ store.
CREATE LOCAL TEMPORARY TABLE tab1(c1 int) IN IQ_SHARED_TEMP
CREATE TABLE t1(c1_bit bit IN iq_main);
Semicolon field delimiters are used primarily with server classes not currently supported; however, you can also use them in situations where a period would also work as a field delimiter. For example, this statement maps the table proxy_a to the SQL Anywhere database mydb on the remote server myasa:
CREATE TABLE proxy_a1 AT 'myasa;mydb;;a1'
Foreign-key definitions are ignored on remote tables. Foreign-key definitions on local tables that refer to remote tables are also ignored. Primary key definitions are sent to the remote server if the server supports primary keys.
In a simplex environment, you cannot create a proxy table that refers to a remote table on the same node. In a multiplex environment, you cannot create a proxy table that refers to the remote table defined within the multiplex.
ON inserts into the table. If a value is not specified for the IDENTITY/DEFAULT AUTOINCREMENT column, a unique value larger than any other value in the column is generated. If an INSERT specifies a value for the column, it is used; if the specified value is not larger than the current maximum value for the column, that value is used as a starting point for subsequent inserts.
Deleting rows does not decrement the IDENTITY/AUTOINCREMENT counter. Gaps created by deleting rows can only be filled by explicit assignment when using an insert. The database option IDENTITY_INSERT must be set to the table name to perform an insert into an IDENTITY/AUTOINCREMENT column.
For example, this creates a table with an IDENTITY column and explicitly adds some data to it:
CREATE TABLE mytable(c1 INT IDENTITY); SET TEMPORARY OPTION IDENTITY_INSERT = "DBA".mytable; INSERT INTO mytable VALUES(5);
After an explicit insert of a row number less than the maximum, subsequent rows without explicit assignment are still automatically incremented with a value of one greater than the previous maximum.
You can find the most recently inserted value of the column by inspecting the @@identity global variable.
You cannot create foreign-key constraints on local temporary tables. Global temporary tables must be created with ON COMMIT PRESERVE ROWS.
Column identifiers in column check constraints that start with the symbol ‘@’ are placeholders for the actual column name. A statement of the form:
CREATE TABLE t1(c1 INTEGER CHECK (@foo < 5))
is exactly the same as this statement:
CREATE TABLE t1(c1 INTEGER CHECK (c1 < 5))
Column identifiers appearing in table check constraints that start with the symbol ‘@’are not placeholders.
If a statement would cause changes to the database that violate an integrity constraint, the statement is effectively not executed and an error is reported. (Effectively means that any changes made by the statement before the error was detected are undone.)
CREATE TABLE Products ( product_num integer UNIQUE ) CREATE TABLE Products ( product_num integer, UNIQUE ( product_num ) )
Column constraints are normally used unless the constraint references more than one column in the table. In these cases, a table constraint must be used.
Prior to SAP Sybase IQ 16.0, an IQ UNIQUE n value > 16777216 would rollover to Flat FP. In 16.0, larger IQ UNIQUE values are supported for tokenization, but may require significant memory resource requirements depending on cardinality and column width.
When the second form is used (PRIMARY KEY followed by a list of columns), the primary key is created including the columns in the order in which they are defined, not the order in which they are listed.
When a column is designated as PRIMARY KEY, FOREIGN KEY, or UNIQUE, SAP Sybase IQ creates a High_Group index for it automatically. For multicolumn primary keys, this index is on the primary key, not the individual columns. For best performance, you should also index each column with a HG or LF index separately.
A temporary table cannot have a foreign key that references a base table and a base table cannot have a foreign key that references a temporary table. Local temporary tables cannot have or be referenced by a foreign key.
If the primary table column names are not specified, the primary table columns are the columns in the table's primary key. If foreign key column names are not specified, the foreign-key columns have the same names as the columns in the primary table. If foreign-key column names are specified, then the primary key column names must be specified, and the column names are paired according to position in the lists.
If the primary table is not the same as the foreign-key table, either the unique or primary key constraint must have been defined on the referenced key. Both referenced key and foreign key must have the same number of columns, of identical data type with the same sign, precision, and scale.
The value of the row's foreign key must appear as a candidate key value in one of the primary table's rows unless one or more of the columns in the foreign key contains nulls in a null allows foreign key column.
Any foreign-key column not explicitly defined is automatically created with the same data type as the corresponding column in the primary table. These automatically created columns cannot be part of the primary key of the foreign table. Thus, a column used in both a primary key and foreign key must be explicitly created.
role-name is the name of the foreign key. The main function of role-name is to distinguish two foreign keys to the same table. If no role-name is specified, the role name is assigned as follows:
The referential integrity action defines the action to be taken to maintain foreign-key relationships in the database. Whenever a primary key value is changed or deleted from a database table, there may be corresponding foreign key values in other tables that should be modified in some way. You can specify an ON DELETE clause, followed by the RESTRICT clause.
If you use CHECK ON COMMIT without specifying any actions, then RESTRICT is implied as an action for DELETE. SAP Sybase IQ does not support CHECK ON COMMIT.
a global temporary table cannot have a foreign key that references a base table and a base table cannot have a foreign key that references a global temporary table. Local temporary tables cannot have or be referenced by a foreign key.
The change is rejected only if the condition is FALSE; in particular, the change is allowed if the condition is UNKNOWN. CHECK condition is not enforced by SAP Sybase IQ.
range-partition-decl: partition-name VALUES <= ( {constant-expr | MAX } [ , { constant-expr | MAX }]... ) [ IN dbspace-name ]
There is no lower bound (MIN value) for the first partition. Rows of NULL cells in the first column of the partition key will go to the first partition. For the last partition, you can either specify an inclusive upper bound or MAX. If the upper bound value for the last partition is not MAX, loading or inserting any row with partition key value larger than the upper bound value of the last partition generates an error.
In addition, partition bound values must be compatible with the corresponding partition-key column data type. For example, VARCHAR is compatible with CHAR.
CREATE TABLE Employees(emp_name VARCHAR(20)) PARTITION BY RANGE(emp_name) (p1 VALUES <=(CAST (1 AS VARCHAR(20))), p2 VALUES <= (CAST (10 AS VARCHAR(20)))
CREATE TABLE emp_id (id INT) PARTITION BY RANGE(id) (p1 VALUES <= (10.5), p2 VALUES <= (100.5))
CREATE TABLE id_emp (id FLOAT) PARTITION BY RANGE(id) (p1 VALUES <= (10), p2 VALUES <= (100))
CREATE TABLE newemp (name BINARY) PARTITION BY RANGE(name) (p1 VALUES <= ("Maarten"), p2 VALUES <= ("Zymmerman")
hash-partitioning-scheme:
HASH ( partition-key [ , partition-key, … ] )
hash-range-partitioning-scheme: PARTITION BY HASH ( partition-key [ , partition-key, … ] ) [ SUBPARTITION BY RANGE ( range-partition-decl [ , range-partition-decl ... ] ) ]The hash partition specifies how the data is logically distributed and colocated; the range subpartition specifies how the data is physically placed. The new range subpartition is logically partitioned by hash with the same hash partition keys as the existing hash-range partitioned table. The range subpartition key is restricted to one column.
CREATE TABLE SalesOrders2 ( FinancialCode CHAR(2), CustomerID int IN Dsp1, History CLOB IN Dsp2, OrderDate TIMESTAMP, ID BIGINT, PRIMARY KEY(ID) IN Dsp4 ) IN Dsp3
CREATE TABLE fin_code2 ( code INT, type CHAR(10), description CLOB IN Dsp2, id BIGINT, FOREIGN KEY fk1(id) REFERENCES SalesOrders(ID) IN Dsp4 )
CREATE TABLE t1 (c1 INT, c2 INT) PARTITION BY RANGE(c1) (p1 VALUES <= (0), p2 VALUES <= (10), p3 VALUES <= (100))
CREATE TABLE bar ( c1 INT IQ UNIQUE(65500), c2 VARCHAR(20), c3 CLOB PARTITION (P1 IN Dsp11, P2 IN Dsp12, P3 IN Dsp13), c4 DATE, c5 BIGINT, c6 VARCHAR(500) PARTITION (P1 IN Dsp21, P2 IN Dsp22), PRIMARY KEY (c5) IN Dsp2) IN Dsp1 PARTITION BY RANGE (c4) (P1 VALUES <= ('2006/03/31') IN Dsp31, P2 VALUES <= ('2006/06/30') IN Dsp32, P3 VALUES <= ('2006/09/30') IN Dsp33 ) ;
Data page allocation for each partition:
Partition | Dbspaces | Columns |
---|---|---|
P1 | Dsp31 | c1, c2, c4, c5 |
P1 | Dsp11 | c3 |
P1 | Dsp21 | c6 |
P2 | Dsp32 | c1, c2, c4, c5 |
P2 | Dsp12 | c3 |
P2 | Dsp22 | c6 |
P3 | Dsp33 | c1, c2, c4, c5, c6 |
P3 | Dsp13 | c3 |
P1, P2, P3 |
Dsp1 |
lookup store of c1 and other shared data |
P1, P2, P3 |
Dsp2 |
primary key (HG for c5) |
CREATE TABLE tbl42 ( c1 BIGINT NOT NULL, c2 CHAR(2) IQ UNIQUE(50), c3 DATE IQ UNIQUE(36524), c4 VARCHAR(200), PRIMARY KEY (c1) ) PARTITION BY HASH ( c4, c3 )
CREATE TABLE tbl42 ( c1 BIGINT NOT NULL, c2 CHAR(2) IQ UNIQUE(50), c3 DATE, c4 VARCHAR(200), PRIMARY KEY (c1)) IN Dsp1 PARTITION BY HASH ( c4, c2 ) SUBPARTITION BY RANGE ( c3 ) ( P1 VALUES <= (2011/03/31) IN Dsp31, P2 VALUES <= (2011/06/30) IN Dsp32, P3 VALUES <= (2011/09/30) IN Dsp33) ;
CREATE TABLE borrowed_book ( date_borrowed DATE NOT NULL, date_returned DATE, book CHAR(20) REFERENCES library_books (isbn), CHECK( date_returned >= date_borrowed ) )
CREATE TABLE t1 ( a INT, b CHAR(10)) AT 'SERVER_A.db1.joe.t1'
CREATE TABLE tab1(c1 CHAR(20) DEFAULT LAST USER)
CREATE LOCAL TEMPORARY TABLE tab1(c1 int) IN IQ_SYSTEM_TEMP
CREATE TABLE tab1 ( c1 INT, c2 CHAR(25) ) ENABLE RLV STORE
You can create a table for another user by specifying an owner name. If GLOBAL TEMPORARY or LOCAL TEMPORARY is not specified, the table is referred to as a base table. Otherwise, the table is a temporary table.
A created global temporary table exists in the database like a base table and remains in the database until it is explicitly removed by a DROP TABLE statement. The rows in a temporary table are visible only to the connection that inserted the rows. Multiple connections from the same or different applications can use the same temporary table at the same time and each connection sees only its own rows. A given connection inherits the schema of a global temporary table as it exists when the connection first refers to the table. The rows of a temporary table are deleted when the connection ends.
When you create a local temporary table, omit the owner specification. If you specify an owner when creating a temporary table, for example, CREATE TABLE dbo.#temp(col1 int), a base table is incorrectly created.
An attempt to create a base table or a global temporary table will fail, if a local temporary table of the same name exists on that connection, as the new table cannot be uniquely identified by owner.table.
You can, however, create a local temporary table with the same name as an existing base table or global temporary table. References to the table name access the local temporary table, as local temporary tables are resolved first.
For example, consider this sequence:
CREATE TABLE t1 (c1 int); INSERT t1 VALUES (9); CREATE LOCAL TEMPORARY TABLE t1 (c1 int); INSERT t1 VALUES (8); SELECT * FROM t1;
The result returned is 8. Any reference to t1 refers to the local temporary table t1 until the local temporary table is dropped by the connection.
In a procedure, use the CREATE LOCAL TEMPORARY TABLE statement, instead of the DECLARE LOCAL TEMPORARY TABLE statement, when you want to create a table that persists after the procedure completes. Local temporary tables created using the CREATE LOCAL TEMPORARY TABLE statement remain until they are either explicitly dropped, or until the connection closes.
Local temporary tables created in IF statements using CREATE LOCAL TEMPORARY TABLE also persist after the IF statement completes.
SAP Sybase IQ does not support the CREATE TABLE ENCRYPTED clause for table-level encryption of SAP Sybase IQ tables. However, the CREATE TABLE ENCRYPTED clause is supported for SQL Anywhere tables in an SAP Sybase IQ database.
SQL–Vendor extension to ISO/ANSI SQL grammar.
Table Type | Privileges Required |
---|---|
Base table in the IQ main store | Table owned by self – Requires CREATE privilege on the dbspace where the table
is created. Also requires one of:
|
Global temporary table | Table owned by self – Requires one of:
|
Proxy table | Table owned by self – Requires one of:
Table owned by any user – Requires one of:
|