Changing Identity Columns
For identity columns (SET GENERATED {ALWAYS | BY DEFAULT}
) it is possible to modify several properties using the following clauses.
Renaming a Column: the TO Clause
Changing the Data Type of a Column: the TYPE Clause
Changing the Position of a Column: the POSITION Clause
The DROP DEFAULT and SET DEFAULT Clauses
The SET NOT NULL and DROP NOT NULL Clauses
The COMPUTED [BY] or GENERATED ALWAYS AS Clauses
For identity columns (SET GENERATED {ALWAYS | BY DEFAULT}
) it is possible to modify several properties using the following clauses.
The SET GENERATED {ALWAYS | BY DEFAULT}
changes an identity column from ALWAYS
to BY DEFAULT
and vice versa.It is not possible to use this to change a regular column to an identity column.
RESTART
The RESTART
clause restarts the sequence used for generating identity values.If only the RESTART
clause is specified, then the sequence resets to the initial value specified when the identity column was defined.If the optional WITH restart_value
clause is specified, the sequence will restart with the specified value.
Note
|
In Firebird 3.0, It is currently not possible to change the configured start value. |
SET INCREMENT
The SET INCREMENT
clause changes the increment of the identity column.
DROP IDENTITY
The DROP IDENTITY
clause will change an identity column to a regular column.
Note
|
It is not possible to change a regular column to an identity column. |
Using the ALTER SQL SECURITY
or DROP SQL SECURITY
clauses, it is possible to change or drop the SQL Security property of a table.After dropping SQL Security, the default value of the database is applied at runtime.
Note
|
If the SQL Security property is changed for a table, triggers that do not have an explicit SQL Security property will not see the effect of the change until the next time the trigger is loaded into the metadata cache. |
To stop replicating a table, use the DISABLE PUBLICATION
clause.To start replicating a table, use the ENABLE PUBLICATION
clause.
The change in publication status takes effect at commit.
The following alterations are not supported:
Changing the collation of a character type column
The ALTER TABLE
statement can be executed by:
The owner of the table
Users with the ALTER ANY TABLE
privilege
ALTER TABLE
Adding the CAPITAL
column to the COUNTRY
table.
ALTER TABLE COUNTRY
ADD CAPITAL VARCHAR(25);
Adding the CAPITAL
column with the NOT NULL
and UNIQUE
constraint and deleting the CURRENCY
column.
ALTER TABLE COUNTRY
ADD CAPITAL VARCHAR(25) NOT NULL UNIQUE,
DROP CURRENCY;
Adding the CHK_SALARY
check constraint and a foreign key to the JOB
table.
ALTER TABLE JOB
ADD CONSTRAINT CHK_SALARY CHECK (MIN_SALARY < MAX_SALARY),
ADD FOREIGN KEY (JOB_COUNTRY) REFERENCES COUNTRY (COUNTRY);
Setting default value for the MODEL
field, changing the type of the ITEMID
column and renaming the MODELNAME column.
ALTER TABLE STOCK
ALTER COLUMN MODEL SET DEFAULT 1,
ALTER COLUMN ITEMID TYPE BIGINT,
ALTER COLUMN MODELNAME TO NAME;
Restarting the sequence of an identity column.
ALTER TABLE objects
ALTER ID RESTART WITH 100;
Changing the computed columns NEW_SALARY
and SALARY_CHANGE
.
ALTER TABLE SALARY_HISTORY
ALTER NEW_SALARY GENERATED ALWAYS AS
(OLD_SALARY + OLD_SALARY * PERCENT_CHANGE / 100),
ALTER SALARY_CHANGE COMPUTED BY
(OLD_SALARY * PERCENT_CHANGE / 100);
ADD
ClauseWith the ADD
clause you can add a new column or a new table constraint.The syntax for defining the column and the syntax of defining the table constraint correspond with those described for [fblangref50-ddl-tbl-create] statement.
Each time a new column is added, the metadata change counter is increased by one
Adding a new table constraint does not increase the metadata change counter
Caution
|
Points to Be Aware of
|
DROP
ClauseThe DROP colname
clause deletes the specified column from the table.An attempt to drop a column will fail if anything references it.Consider the following items as sources of potential dependencies:
column or table constraints
indexes
stored procedures, functions and triggers
views
Each time a column is dropped, the table’s metadata change counter is increased by one.
DROP CONSTRAINT
ClauseThe DROP CONSTRAINT
clause deletes the specified column-level or table-level constraint.
A PRIMARY KEY
or UNIQUE
key constraint cannot be deleted if it is referenced by a FOREIGN KEY
constraint in another table.It will be necessary to drop that FOREIGN KEY
constraint before attempting to drop the PRIMARY KEY
or UNIQUE
key constraint it references.
Deleting a column constraint or a table constraint does not increase the metadata change counter.
ALTER [COLUMN]
ClauseWith the ALTER [COLUMN]
clause, attributes of existing columns can be modified without the need to drop and re-add the column.Permitted modifications are:
change the name (does not affect the metadata change counter)
change the data type (increases the metadata change counter by one)
change the column position in the column list of the table (does not affect the metadata change counter)
delete the default column value (does not affect the metadata change counter)
set a default column value or change the existing default (does not affect the metadata change counter)
change the type and expression for a computed column (does not affect the metadata change counter)
set the NOT NULL
constraint (does not affect the metadata change counter)
drop the NOT NULL
constraint (does not affect the metadata change counter)
change the type of an identity column, or change an identity column to a regular column
restart an identity column
change the increment of an identity column
TO
ClauseThe TO
keyword with a new identifier renames an existing column.The table must not have an existing column that has the same identifier.
It will not be possible to change the name of a column that is included in any constraint: primary key, unique key, foreign key, or CHECK
constraints of the table.
Renaming a column will also be disallowed if the column is used in any stored PSQL module or view.
TYPE
ClauseThe keyword TYPE
changes the data type of an existing column to another, allowable type.A type change that might result in data loss will be disallowed.As an example, the number of characters in the new type for a CHAR
or VARCHAR
column cannot be smaller than the existing specification for it.
If the column was declared as an array, no change to its type or its number of dimensions is permitted.
The data type of a column that is involved in a foreign key, primary key or unique constraint cannot be changed at all.
POSITION
ClauseThe POSITION
keyword changes the position of an existing column in the notional “left-to-right” layout of the record.
Numbering of column positions starts at 1.
If a position less than 1 is specified, an error message will be returned
If a position number is greater than the number of columns in the table, its new position will be adjusted silently to match the number of columns.
DROP DEFAULT
and SET DEFAULT
ClausesThe optional DROP DEFAULT
clause deletes the current default value for the column.
If the column is based on a domain with a default value, the default value will revert to the domain default
An error will be raised if an attempt is made to delete the default value of a column which has no default value or whose default value is domain-based
The optional SET DEFAULT
clause sets a default value for the column.If the column already has a default value, it will be replaced with the new one.The default value applied to a column always overrides one inherited from a domain.
DROP TABLE
Drops a table
DSQL, ESQL
DROP TABLE tablename
Parameter | Description |
---|---|
tablename |
Name (identifier) of the table |
The DROP TABLE
statement drops (deletes) an existing table.If the table has dependencies, the DROP TABLE
statement will fail with an error.
When a table is dropped, all its triggers and indexes will be deleted as well.
The DROP TABLE
statement can be executed by:
The owner of the table
Users with the DROP ANY TABLE
privilege
DROP TABLE
COUNTRY
table.DROP TABLE COUNTRY;
RECREATE TABLE
Drops a table if it exists, and creates a table
DSQL
RECREATE [GLOBAL TEMPORARY] TABLE tablename [EXTERNAL [FILE] 'filespec'] (<col_def> [, {<col_def> | <tconstraint>} ...]) [{<table_attrs> | <gtt_table_attrs>}]
See the CREATE TABLE
section for the full syntax of CREATE TABLE
and descriptions of defining tables, columns and constraints.
RECREATE TABLE
creates or recreates a table.If a table with this name already exists, the RECREATE TABLE
statement will try to drop it and create a new one.Existing dependencies will prevent the statement from executing.
RECREATE TABLE
COUNTRY
table.RECREATE TABLE COUNTRY (
COUNTRY COUNTRYNAME NOT NULL PRIMARY KEY,
CURRENCY VARCHAR(10) NOT NULL
);