
- •Работа с таблицами в системе управления базами данных oracle
- •Типы данных Oracle
- •Строки символов
- •Числовые типы
- •Двоичные данные
- •Дата и время
- •Преобразование типов данных
- •Правила сравнения типов данных
- •Значения Null
- •Псевдостолбцы
- •Объекты базы данных
- •Создание таблиц
- •Ограничения для таблиц и столбцов
- •Alter table
- •Удаление таблицы
- •Ввод данных в таблицы
- •Удаление таблицы
- •Представление
- •Индексы
- •Create sequence
- •Create synonym
- •Индексы
- •Работа с индексами
- •Явные и неявные индексы
- •Изменение индекса
- •Удаление индексов
- •Битовые индексы
- •Кластеры
- •Создание кластеров
- •Удаление кластеров
Удаление таблицы
Для удаления из базы данных таблицы (вместе с ее содержимым) используется оператор DROPTABLE.
DROP TABLE [имя_схемы.] имя_таблицы [ CASCADE CONSTRAINTS ]
Представление
Представление — это поименованная, динамически поддерживаемая сервером выборка из одной или нескольких таблиц. Оператор SELECT, определяющий выборку, ограничивает видимые пользователем данные. Кроме того, представление позволяет эффективно ограничить данные, которые пользователь может модифицировать. Сервер гарантирует актуальность представления, то есть формирование представления (материализация соответствующего запроса) производится каждый раз при использовании представления. Используя представления, администратор базы данных ограничивает доступную пользователям часть логического пространства базы данных только теми данными, которые реально необходимы для выполнения его работы.
Оператор определения представлений Oracleиспользует следующий синтаксис:
CREATE [OR REPLACE] [FORCE | NO FORCE] VIEW [ имя_схемы.] имя
[альтернативное_имя [альтернативное_имя...]]
ASзапрос
[WITH READ ONLY | CHECK OPTION [CONSTRAINT ограничениецелостности ]]
Ключевое слово OR REPLACE указывает на принудительное замещение старого представления новым, образуемым командой CREATE. Использование этого параметра позволяет не выполнять повторного предоставления привилегий, которое было бы необходимо, если использовать команды DROP и CREATE для уничтожения и создания представления заново.
Ключевое слово FORCEуказывает на принудительное создание представления вне зависимости от того, существуют ли базовые таблицы представления и есть ли у пользователя, создающего представление, привилегии на выборку из базовых таблиц. Отметим, что при отсутствии выполнения любого из перечисленных выше условий попытка выполнить любую операцию с созданным представлением будет отвергнута системой. Ключевое словоNOFORCE(используемое по умолчанию) указывает на обязательность существования базовых таблиц и наличия у пользователя, создающего представление, привилегий на доступ к базовым таблицам. При нарушении какого-либо из этих условии представление не создается.
Удаление представления из базы данных выполняется командой DROPVIEW. Для удаления представления необходимо быть его владельцем или иметь привилегиюDROPANYVIEW.
DROP VIEW [имя_схемы.}имя_представления
При уничтожении представления синонимы и представления, ссылающиеся на уничтожаемое представление, не уничтожаются, а становятся неверными. Их можно уничтожить или переопределить, а также можно переопределить другие представления и таблицы, с ним связанные, чтобы представления и синонимы стали вновь актуальными. Привилегии на удаляемое представление отменяются.
Индексы
Индекс обеспечивает прямой доступ к строкам таблицы, снижая тем самым время доступа. Индекс содержит элементы для каждого значения, существующего в индексируемых столбцах. В настоящее время индекс используется также для обеспечения уникальности. Необходимо быть владельцем таблицы или иметь к ней привилегию INDEX или иметь привилегию DBA.
CREATE [UNIQUE] INDEX index ON
table (column [ASC|DESC][,column [ASC|DESC]]...]
| CLUSTER cluster
[INITRANS n] [MAXTRANS n]
[TABLESPACE tablespace]
[STORAGE storage]
[PCTFREE n]
[NOSORT]
UNIQUE гарантирует, что в таблице не будет двух строк с одинаковыми значениями в индексированных столбцах. Если уникальный индекс не создан, таблица может содержать дублирующиеся строки.
index имя создаваемого индекса. Как и для других объектов базы данных, имя индекса должно быть уникальным среди объектов данного пользователя.
table имя существующей таблицы, для которой создается индекс.
column имя столбца таблицы.
ASC допустим для совместимости с DB2,
DESC хотя в любом случае индексы создаются в порядке возрастания.
CLUSTER имя кластера, для которого будет создаваться индекс кластера.
INITRANS и MAXTRANS параметров INITRANS и MAXTRANS в операторе CREATE TABLE).
TABLESPACE имя табличного пространства, в котором будет содержаться индекс.
STORAGE описывает место хранение индекса аналогично таблице.
PCTFREE специфицирует процент памяти, остающейся свободной в каждом блоке индекса для последующих изменений и вставок.
NOSORT указывает системе ORACLE, что данные в таблице расположены в возрастающем порядке и, следовательно, при сортировке индекса строки сортировать не надо.
ORACLE может воспользоваться индексами с целью увеличения производительности в следующих случаях:
* при доступе к таблицам по индексным столбцам
* при поиске строк со значениями, заданными для индексированных столбцов.
Индекс замедляет операции по добавлению, удалению и изменению строк, так как данные индекса также нуждаются в сопровождении.
В один индекс может быть включено максимально 16 столбцов. Элемент индекса в этом случае представляет собой конкатенацию данных изо всех столбцов. Столбцы могут указываться в любом порядке и этот порядок важен лишь при использовании индекса.
При необходимости ORACLE может использовать весь индекс или его начальную часть. Допустим, индекс IDX1 создан на столбцах A,B,C таблицы TAB1 (в порядке A,B,C). ORACLE может использовать этот индекс для ссылки на столбцы A,B,C (полный индекс), на столбцы A,B и на столбец C. Ссылка на столбцы B,C не может использовать индекс IDX1.
Для одной таблицы можно создать индексы для различных столбцов (или различных комбинаций столбцов). Каждый индекс снижает производительность модификации данных. На количество индексов, которые можно создать для одной таблицы, ограничений не накладывается.
Элемент индекса для заданного столбца состоит из:
* ROWID строк (6 байтов для уникального или 7 байтов - для неуникального индекса)
* внутренней памяти для индексируемых столбцов (длина в байтах каждого столбца плюс один байт дополнительно)
Максимально допустимый размер элемента индекса зависит от операционной системы.
Создание уникального индекса для одного или группы столбцов гарантируете, что в таблице не будет двух одинаковых по этим столбцам строк. Для таблицы можно создать любое число уникальных индексов; большинство таблиц имеют как минимум один уникальный индекс: индекс на основном ключе таблицы.
Каждый индекс должен следовать стандартам именования системы ORACLE и отличаться от других имен объектов данного пользователя. Ниже приводятся дополнительные рекомендации по именованию индексов:
* включайте в имена индексов имена таблиц и столбцов, на которых он создается.
* предваряйте имя индекса буквой "I".
* разделяйте пунктуацией имена таблиц и столбцов.
Например, индекс, созданный на столбцах SAL и COMM таблицы EMP можно назвать: I_EMP$SAL_COMM.
В момент создания индекса ORACLE будет оставлять незаполненным PCTFREE от блока индекса. Например, если PCTFREE равен 20, каждый блок индекса будет заполнен на 80% своей емкости. Большее значение PCTFREE позволяет выполнить большее количество вставок перед тем, как индексные блоки будут разделяться (что требует дополнительных временных затрат). Небольшое значение PCTFREE подходит для статичных таблиц, в которых маловероятно разделение индексных блоков. Маленький индекс влечет за собой ускорение его просмотра.
Опция NOSORT может существенно снизить время, необходимое для создания индекса. При нормальном создании индекса сначала таблица сортируется по индексируемым столбцам, а уже затем строится индекс. На сортировку обычно тратится значительная часть времени построения индекса. Если же строки таблицы уже отсортированы в порядке возрастания по индексируемым столбцам, опция NOSORT позволяет системе ORACLE пропустить фазу сортировки.
При создании индекса кластера опцию NOSORT использовать нельзя.
Опция NOSORT будет также снижать и общее количество памяти, необходимой для построения индекса. Для сортировки ORACLE использует временные сегменты и коли сортировка выполняться не будет, индекс создастся с гораздо меньшей временной памятью.
Для того, чтобы воспользоваться опцией NOSORT, необходимо гарантировать, что строки таблицы расположены в возрастающем порядке. Так как физическая независимость данных присуща всем системам управления реляционными базами данных (особенно - системе ORACLE), не существует способа изменения внутреннего порядка расположения строк в таблице. Поэтому создание индекса с опцией NOSORT должно выполняться сразу же после загрузки в таблицу отсортированных данных.
Запуская построение индекса с опцией NOSORT, Вы ничем не рискуете, так как если порядок строк в таблице окажется нарушенным, ORACLE выдаст ошибку и Вы сможете повторить создание индекса уже без опции NOSORT.
Значения NULL не индексируются, следовательно запрос:
SELECTENAMEFROMEMPWHERECOMMISNULLне будет использовать индекс, созданный на столбце COMM.
Уникальный индекс также не рассматривает значения NULL как дублирующиеся и добавление нескольких таких строк не повлечет за собой ошибки.
При начальном создании кластера ORACLE автоматически не создает для него индекса, однако пока он не создан, над кластером нельзя выполнять операции DML. Одним оператором CREATE INDEX можно создать либо индекс кластера, либо индекс таблицы, но не оба вместе. Следовательно, можно использовать фразу CLASTER, только если не указано в том же операторе CREATE INDEX имени таблицы.
Для создания индекса в кластере EMPLOYEE введите:
CREATE INDEX IC_EMP ON CLUSTER EMPLOYEE
Заметьте, что при этом не указываются столбцы, на которых создается индекс, так как для кластера в качестве них берутся столбцы ключа кластера.
Например: для индексирования таблицы EMP по столбцу ENAME необходимо ввести
CREATE INDEX I_EMP$ENAME ON EMP (ENAME)