mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-23 00:03:02 +01:00
52 lines
1.7 KiB
Plaintext
52 lines
1.7 KiB
Plaintext
----------------
|
|
Identity Columns
|
|
----------------
|
|
|
|
Author:
|
|
Adriano dos Santos Fernandes <adrianosf@gmail.com>
|
|
|
|
Description:
|
|
An identity column is a column associated with an internal sequence generator and has it value
|
|
automatically set when omitted in an INSERT statement.
|
|
|
|
Syntax:
|
|
<column definition> ::=
|
|
<name> <type> GENERATED BY DEFAULT AS IDENTITY <constraints>
|
|
|
|
Syntax rules:
|
|
- The type of an identity column must be an exact number type with zero scale. That includes:
|
|
smallint, integer, bigint, numeric(x, 0) and decimal(x, 0).
|
|
- Identity columns can't have DEFAULT or COMPUTED value.
|
|
|
|
Notes:
|
|
- You cannot alter a identity column to normal column and vice versa.
|
|
- Identity columns are implicitly NOT NULL.
|
|
- Identity columns don't enforce uniqueness automatically. Use UNIQUE or PRIMARY key for that.
|
|
|
|
Implementation:
|
|
Two columns have been inserted in RDB$RELATION_FIELDS: RDB$GENERATOR_NAME and RDB$IDENTITY_TYPE.
|
|
RDB$GENERATOR_NAME stores the automatically created generator for the column. In RDB$GENERATORS,
|
|
the value of RDB$SYSTEM_FLAG of that generator will be 6. RDB$IDENTITY_TYPE will currently
|
|
always store the value 0 (by default) for identity columns and NULL for non-identity columns.
|
|
In the future this column will can store the value 1 (always) when Firebird support this type
|
|
of identity column.
|
|
|
|
Example:
|
|
|
|
create table objects (
|
|
id integer generated by default as identity primary key,
|
|
name varchar(15)
|
|
);
|
|
|
|
insert into objects (name) values ('Table');
|
|
insert into objects (name) values ('Book');
|
|
insert into objects (id, name) values (10, 'Computer');
|
|
|
|
select * from objects;
|
|
|
|
ID NAME
|
|
============ ===============
|
|
1 Table
|
|
2 Book
|
|
10 Computer
|