CREATE TABLE tablename ( colname SERIAL );
Эта команда эквивалентна следующей группе команд:
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename
( colname integer NOT NULL
DEFAULT nextval( 'tablename_colname_seq' )
);
ALTER SEQUENCE tablename_colname_seq
OWNED BY tablename.colname;
Для пояснения вышеприведенных команд нам придется немного забежать впе-
ред. Одним из видов объектов в базе данных являются так называемые последова-
тельности. Это, по сути, генераторы уникальных целых чисел. Для работы с этими
последовательностями-генераторами используются специальные функции. Одна из
них — это функция nextval(), которая как раз и получает очередное число из последо-
вательности, имя которой указано в качестве параметра функции. В команде CREATE
TABLE ключевое слово DEFAULT предписывает, чтобы СУБД использовала в качестве
значения по умолчанию то значение, которое формирует функция nextval(). Поэто-
му если в команде вставки строки в таблицу INSERT INTO не будет передано значение
для поля типа serial, то СУБД обратится к услугам этой функции. В том случае, когда в
таблице поле типа serial является суррогатным первичным ключом, тогда нет необ-
ходимости указывать явное значение для вставки в это поле.
В заключение скажем, что кроме типа serial существуют еще два аналогичных типа:
bigserial и smallserial. Им фактически, за кадром, соответствуют типы bigint и smallint.
Поэтому при выборе конкретного последовательного типа нужно учитывать предпо-
лагаемое число строк в таблице и частоту удаления и вставки строк, поскольку даже
для небольшой таблицы может потребоваться большой диапазон, если операции уда-
ления и вставки строк выполняются часто.
Достарыңызбен бөлісу: