Делимся последними новостями о СУБД SoQoL

Удалить объект в любом случае

Если подытожить ранние публикации про таблицы в СУБД SoQoL, то мы рассказали о реализованных возможностях:
создать таблицу
внести в неё данные
изменить данные таблицы
удалить из таблицы данные
изменить структуру таблицы

Теперь можно перейти и к DROP TABLE в SoQoL.

Если бы мы начали рассказывать о данной команде сразу после выпуска бета-версии SoQoL, то рассказ был бы кратким, а синтаксис выглядел бы так:

DROP TABLE <имя_таблицы>;

И такой командой можно удалить любую, несвязанную с другими, таблицу.

Например, такую:

create table PERSON (TN int primary key, DEPT varchar (75), NAME varchar (75));
drop table PERSON;

При этом стоит отметить, что при удалении таблицы:
1. Удаляются и:
- индексы, построенные по её столбцам;
- привилегии пользователей на доступ к ней.

2. Становятся нерабочими те объекты, которые ссылаются на неё. Т.е. при обращении к представлению или вызове процедуры, которые ссылаются на удалённую таблицу, будет возвращена ошибка. И так будет до тех пор, пока не будет создана таблица (или представление), одноимённая с удалённой.

Только и этого мало.

На текущий момент возможности этой команды в нашей СУБД стали шире. Давайте взглянем чуть подробнее.

Например, если ранее на таблицу были наложены ссылочные ограничения целостности в виде FOREIGN KEY, то удалить её было бы невозможно до момента удаления этих самых ограничений. Теперь можно и это.

Посмотрим на примере:

Возьмём таблицы из прошлого поста:
- с детализацией данных по сотрудникам:

create table PERSON_DETAILS (TN int primary key, DEPT varchar (75), UNIT varchar (35), CITY varchar (35));

- с остальной информацией по сотрудникам и установлением FOREIGN KEY, связывающим эти две таблицы:

create table WORKERS (TN int primary key, NAME varchar (35), SALARY number (10, 2)
constraint PERSONAL foreign key (TN) references PERSON_DETAILS (TN));

Попытка удалить таблицу PERSON_DETAILS командой «раннего» синтаксиса закончится возвратом ошибки с предупреждением, что есть ссылки на внешние ключи.
Поэтому, если нам нужно удалить таблицу несмотря на эти ссылки, действуем так:

drop table PERSON_DETAILS cascade;

С небольшим, но важным дополнением в виде CASCADE таблица удаляется успешно, а вместе с ней и все ссылочные ограничения.

Ещё появилось дополнение к команде в виде фразы «if exists»:

drop table if exists PERSON_DETAILS cascade;

Это дополнение позволяет в случае отсутствия таблицы в БД предотвратить ошибку, что очень удобно использовать в повторно исполняемых скриптах создания структуры БД.

На этом разговоры о таблицах пока закончим.

Или может рассказать про реализацию FOREIGN KEY в SoQoL? А может есть другие вопросы, предложения – пишите в нашем сообществе в телеграме! Перейти!