8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-23 00:03:02 +01:00
firebird-mirror/doc/sql.extensions/README.identity_columns.txt
2014-05-24 06:12:52 +00:00

71 lines
2.1 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 [ (START WITH <value>) ] <constraints>
<alter column definition> ::=
<name> RESTART [ WITH <value> ]
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 1 (by default) for identity columns and NULL for non-identity columns.
In the future this column will store the value 0, too (for 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 order by id;
commit;
ID NAME
============ ===============
1 Table
2 Book
10 Computer
alter table objects
alter id restart with 14;
insert into objects (name) values ('Pencil');
select * from objects order by id;
ID NAME
============ ===============
1 Table
2 Book
10 Computer
15 Pencil