Учебное пособие Санкт-Петербург «бхв-петербург»


CREATE TEMP TABLE aircrafts_tmp AS



Pdf көрінісі
бет165/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   161   162   163   164   165   166   167   168   ...   256
sql osnovi yazika

CREATE TEMP TABLE aircrafts_tmp AS
SELECT * FROM aircrafts WITH NO DATA;
Наложим на таблицу необходимые ограничения: они не создаются при копировании
таблицы. При массовом вводе данных гораздо более эффективным с точки зрения
производительности было бы сначала добавить строки в таблицу, а уже потом накла-
дывать ограничения на нее. Однако в нашем случае речь о массовом вводе не идет,
211


Глава 7. Изменение данных
поэтому мы начнем с наложения ограничений, а уже потом добавим строки в таб-
лицу.
ALTER TABLE aircrafts_tmp
ADD PRIMARY KEY ( aircraft_code );
ALTER TABLE aircrafts_tmp
ADD UNIQUE ( model );
Теперь создадим вторую таблицу, и также не будем копировать в нее данные из по-
стоянной таблицы aircrafts.
CREATE TEMP TABLE aircrafts_log AS
SELECT * FROM aircrafts WITH NO DATA;
Ограничения в виде первичного и уникального ключей этой таблице не требуются,
но потребуются еще два столбца: первый будет содержать дату/время выполнения
операции над таблицей aircrafts_tmp, а второй — наименование этой операции
(INSERT, UPDATE или DELETE).
ALTER TABLE aircrafts_log
ADD COLUMN when_add timestamp;
ALTER TABLE aircrafts_log
ADD COLUMN operation text;
Поскольку в рассматриваемой ситуации копировать данные из постоянных таблиц во
временные не требуется, то в качестве альтернативного способа создания временных
таблиц можно было бы воспользоваться командой CREATE TEMP TABLE с предложе-
нием LIKE. Например:
CREATE TEMP TABLE aircrafts_tmp
( LIKE aircrafts INCLUDING CONSTRAINTS INCLUDING INDEXES );
Но так как уникального индекса по столбцу model в таблице aircrafts нет, то
для временной таблицы его пришлось бы сформировать с помощью команды ALTER
TABLE, как и при использовании первого способа ее создания. Добавим, что пред-
ложение LIKE можно применять для создания не только временных таблиц, но и
постоянных.
Поскольку у нас есть журнальная таблица aircrafts_log, мы можем записывать в
нее все операции с таблицей aircrafts_tmp, т. е. вести историю изменений данных
таблицы aircrafts_tmp.
212


7.1. Вставка строк в таблицы
Начнем работу с того, что скопируем в таблицу aircrafts_tmp все данные из табли-
цы aircrafts. Для выполнения не только «полезной» работы, но и ведения журнала
изменений мы используем команду INSERT с общим табличным выражением.
Вообще, при классическом подходе для ведения учета изменений, внесенных в таб-
лицы, используют триггеры или правила (rules), но их рассмотрение выходит за рам-
ки этого пособия. Поэтому наш пример нужно рассматривать как иллюстрацию воз-
можностей общих табличных выражений (CTE), а не как единственно верный подход.


Достарыңызбен бөлісу:
1   ...   161   162   163   164   165   166   167   168   ...   256




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет