AUTO_INCREMENT и SEQUENCE в разных SQL диалектах

164
20 ноября 2021, 08:00

Почему, например, в Oracle SQL нет понятия AUTO_INCREMENT?

Я так понимаю, для реализации инкриметного ключа в Oracle используется SEQUENCE.

Но почему этот способ более универсальный и в чем плюсы и минусы использования SEQUENCE по сравнеию с AUTO_INCREMENT? Почему Oracle пошла по этому пути?

Answer 1

Почему, например, в Oracle SQL нет понятия AUTO_INCREMENT?

Есть, 2.1.6.3 IDENTITY Columns, и даже называется в соответстви с ANSI стандартом:

Table columns have been enhanced to support the American National Standards Institute (ANSI) SQL keyword IDENTITY.
This provides a standards based approach to the declaration of automatically incrementing columns simplifying application development and making the migration of DDL to Oracle simpler.

Было введено в релизе 12.1.0.1, дата выпуска 2014. Что же всё таки в те времена изменилось?

create table t1 (id number generated always as identity, item varchar2 (32));
insert into t1 (item) values ('first item');
select * from table (dbms_xplan.display_cursor);
----------------------------------------------------------
| Id  | Operation                | Name          | Cost  |
----------------------------------------------------------
|   0 | INSERT STATEMENT         |               |     1 |
|   1 |  LOAD TABLE CONVENTIONAL | T1            |       |
|   2 |   SEQUENCE               | ISEQ$$_120741 |       |
----------------------------------------------------------

Как видно, при вставке используются всё те же последовательности (sequences), которые будут соданы автоматически (неявно) и получат сгенерированные имена.

Говорить о плюсах/минусах лучше в рамках конкретной задачи с конкретными требованиями, но всё таки несколько замечаний:

  • "Explicit is better than implicit" (ц) - явное всегда лучше неявного.
  • В этой статье можно посмотреть сравнение проиводительности и взять на заметку.
  • IDENTITY колонки имют ряд ограничений, и это может вывать некоторые "неудобства".
READ ALSO
Что такое # перед селектором в CSS?

Что такое # перед селектором в CSS?

Что такое # перед селектором в CSS? Чем он отличается оти как это называется, чтоб я смог статейки поискать

92
Зачем Pixel perfect верстка

Зачем Pixel perfect верстка

Зачем писать макет pixel perfect? Я так понимаю для этого используется Position: relative И отрицательные marginЭто же от одной до трех лишних строк иногда...

223
Почему появляется отступ в form?

Почему появляется отступ в form?

Делаю все по пропорциям, все свойства правильные(не факт) и выходит отступ справа, хотя я его не задавалУбрать тоже не получается

227
Проблема с нахождением полуслова "авва" в тексте

Проблема с нахождением полуслова "авва" в тексте

Представлено вот такое задание:

190