Если подытожить ранние публикации про таблицы в СУБД 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? А может есть другие вопросы, предложения – пишите в нашем сообществе в телеграме! Перейти!