Главная страница
Навигация по странице:

  • 13.2. Создание базы данных и схем

  • Листинг 13.1. Пример создания таблицы Люди с физическими параметрами хранения

  • 13.3.1. Описание таблицы

  • Ограничения целостности для столбца

  • Ограничения целостности для таблицы

  • Листинг 13.2. Пример создания таблицы Меню

  • Ограничения целостности, создаваемые триггерами

  • 13.3.3. Комментарии к описанию таблицы

  • Листинг 13.3. Пример создания таблицы Меню с комментариями

  • Листинг 13.4. Пример создания таблицы Люди с ограничениями целостности, добавленными предложениями ALTER TABLE

  • 13.6. Создание последовательностей

  • Кириллов В.В., Громов Г.Ю. - Введение в реляционные базы данных. Литература для вузов isbn 9785941577705 в книге рассматриваются основные понятия баз данных и систем управления ими


    Скачать 11.62 Mb.
    НазваниеЛитература для вузов isbn 9785941577705 в книге рассматриваются основные понятия баз данных и систем управления ими
    АнкорКириллов В.В., Громов Г.Ю. - Введение в реляционные базы данных.pdf
    Дата16.04.2018
    Размер11.62 Mb.
    Формат файлаpdf
    Имя файлаКириллов В.В., Громов Г.Ю. - Введение в реляционные базы данных.pdf
    ТипЛитература
    #18127
    страница16 из 28
    1   ...   12   13   14   15   16   17   18   19   ...   28
    Глава 13.
    Создание базы данных
    и ее основных объектов
    Глава 14.
    Системный каталог (словарь данных)
    Глава 15.
    Оптимизация SQL
    -
    запросов

    Глава 13
    Создание базы данных
    и ее основных объектов
    13.1. О языке определения данных (
    DDL)
    Большинство пользователей работает с существующими базами данных с помощью каких-либо приложений. Однако некоторым из них иногда требу- ется создавать как сами базы данных, так и новые объекты в существующих базах данных. Для этого необходимо познакомиться с языком определения данных, с помощью которого можно:

    создать новую базу данных;

    создать так называемую схему в существующей базе данных;

    определить структуру новой таблицы и создать ее;

    удалить таблицу, которая больше не нужна;

    изменить определение существующей таблицы;

    создать индексы для ускорения доступа к таблицам;

    управлять физическим размещением данных;

    создать процедуру, функцию или триггер.
    В большинстве случаев предложения DDL обеспечивают высокий уровень доступа к данным и позволяют пользователю не вникать в детали хранения информации в базе данных на физическом уровне. Они оперируют абстракт- ными объектами базы данных, такими как таблицы и столбцы. Однако DDL не может совершенно не затрагивать вопросов, связанных с физической памятью.
    Инструкции и предложения DDL, управляющие физической памятью, могут быть разными в различных СУБД. Ядро языка определения данных образуют три глагола:

    CREATE
    (создать) — позволяет определить и создать объект базы данных;

    DROP
    (удалить) — служит для удаления существующего объекта базы данных;

    Часть
    V.
    Язык SQL. Создание базы данных
    242

    ALTER
    (изменить) — с его помощью можно изменить определение объекта базы данных.
    Все основные реляционные СУБД позволяют использовать три указанных глагола во время своей работы. Таким образом, структура реляционной базы данных является динамической. Например, СУБД может создавать, удалять или изменять таблицы, одновременно с этим обеспечивая доступ пользовате- лей к базе данных. Это одно из главных преимуществ реляционных баз дан- ных по сравнению с более ранними системами, в которых изменять струк- туру базы данных можно было только после прекращения работы СУБД.
    Это означает, что с течением времени база данных может расти и изменяться.
    Ее промышленная эксплуатация может продолжаться в то время, когда в базу данных добавляются все новые таблицы и модули.
    Хотя DDL и DML являются двумя отдельными частями SQL, в большинстве реляционных СУБД такое разделение существует лишь на абстрактном уров- не. Обычно инструкции DDL и DML в СУБД абсолютно равноправны, и их можно произвольно чередовать как в интерактивном, так и в программном
    SQL. Если программе или пользователю требуется таблица для временного хранения результатов, они могут создать эту таблицу, заполнить ее, проде- лать с данными необходимую работу и затем удалить таблицу.
    13.2. Создание базы данных и схем
    В СУБД крупных корпораций новые базы данных создаются администрато- ром. В СУБД, установленных на серверах более низкого уровня, отдельным пользователям разрешается создавать собственные базы данных, но обычно в таких СУБД базы данных создаются централизованно, а пользователи за- тем работают с ними. Если же вы сами создаете базу данных на персональ- ном компьютере, то вы являетесь и ее администратором и пользователем.
    Следует отметить, что в этом абзаце речь идет о физической базе данных (на- боре физических файлов операционной системы, ассоциирующихся с именем базы данных).
    При создании базы данных, например, в СУБД Oracle с помощью предложения
    CREATE DATABASE [имя_базы_данных]
    { USER SYS IDENTIFIED BY пароль
    | USER SYSTEM IDENTIFIED BY пароль
    }... ; создается новая пустая база данных с указанным именем
    имя_базы_данных
    (до восьми символов на латинице) и двумя пользователями с именами
    SYS

    Глава 13. Создание базы данных и ее основных объектов
    243
    и
    SYSTEM
    , имеющими пароли по умолчанию change_on_install и manager соответственно. Если имя опускается, то его создает сама СУБД, а пароли ука- занных суперпользователей могут быть затем изменены администратором.
    Полные тексты команд
    CREATE DATABASE
    и
    ALTER DATABASE
    достаточно слож- ны (в Oracle они занимают более 50 страниц документации), и мы не будем их обсуждать. Создание же базы данных для поставляемого на компакт-диске
    Oracle Database 10g Express Edition подробно описано в приложении А.
    К сожалению, под словосочетанием "база данных" нередко подразумевают или саму СУБД, или схему базы данных — именованный набор объектов ба- зы данных (таблиц, представлений, процедур, триггеров, функций и др.), как правило, ассоциирующийся с каким-либо пользователем. Например, при соз- дании базы данных были определены два таких суперпользователя и их схе- мы, где хранятся системные данные. Затем можно в этой базе данных создать множество необходимых схем (пользователей).
    В Oracle понятия "схема" и "пользователь" слились воедино. Формально два разных слова "user" и "schema" используются в Oracle для обозначения одно- го и того же: "схемы-пользователя". Документация на этот счет стыдливо говорит, что "при заведении пользователя
    CREATE USER имя_пользователя IDENTIFIED BY пароль автоматически создается схема с таким же именем", т. е. в системе понятий
    Oracle "схема" = "пользователь".
    Например, администратор базы данных СПбГУ ИТМО создал пустые схемы для студентов, которым необходим при обучении доступ к учебной базе дан- ных, задав их имена (идентификатор студента) и сгенерировав пароли. Кроме того, этим студентам даны права на создание объектов в своих схемах и пра- ва на чтение таблиц схемы c именем учебной базы данных (см. часть VI), в которой хранится иллюстрационная база данных, используемая в лабора- торном практикуме.
    13.3. Создание таблиц
    Манипулирование таблицами — наиболее распространенный вид деятельно- сти, который администраторы баз данных и пользователи осуществляют при работе с объектами баз данных. В отличие от рассмотренных ранее предложе- ний языка DML, предложения
    CREATE TABLE
    для различных СУБД, достаточно сильно отличаются от стандарта, хотя в основном поддерживают его функции.
    Рассмотрим для примера подробное описание таблицы
    Люди базы данных
    (схемы) "LIBRARY" (см. разд. 12.3), созданной в СУБД Oracle.

    Часть
    V.
    Язык SQL. Создание базы данных
    244
    Листинг 13.1. Пример создания таблицы Люди
    с физическими параметрами
    хранения
    CREATE TABLE ЛЮДИ
    (
    ИД NUMBER(6,0) NOT NULL CONSTRAINT "ЛЮДИ_PK" PRIMARY KEY
    USING INDEX
    TABLESPACE "USERS"
    PCTFREE 10
    INITRANS 2
    MAXTRANS 255
    STORAGE
    (
    INITIAL 64K
    NEXT 1024K
    MINEXTENTS 1
    MAXEXTENTS unlimited
    PCTINCREASE 0
    FREELISTS 1
    FREELIST GROUPS 1
    BUFFER_POOL DEFAULT
    ),
    ФАМИЛИЯ VARCHAR2(50) NOT NULL,
    ИМЯ VARCHAR2(50) NOT NULL,
    ОТЧЕСТВО VARCHAR2(50) NOT NULL,
    ПСЕВДОНИМ VARCHAR2(50),
    ДАТА_РОЖДЕНИЯ DATE NOT NULL,
    ПОЛ CHAR(1) NOT NULL CONSTRAINT "Пол может быть М или Ж" CHECK
    (пол in ('М','Ж')),
    АДРЕС VARCHAR2(200),
    ТЕЛЕФОН VARCHAR2(50),
    CONSTRAINT "ЛЮДИ_UK" UNIQUE (ФАМИЛИЯ, ИМЯ, ОТЧЕСТВО,
    ДАТА_РОЖДЕНИЯ, ПОЛ)
    USING INDEX
    TABLESPACE "USERS"
    PCTFREE 10
    INITRANS 2
    MAXTRANS 255
    STORAGE
    (
    INITIAL 64K
    NEXT 1024K
    MINEXTENTS 1

    Глава 13. Создание базы данных и ее основных объектов
    245
    MAXEXTENTS unlimited
    PCTINCREASE 0
    FREELISTS 1
    FREELIST GROUPS 1
    BUFFER_POOL DEFAULT
    )
    )
    TABLESPACE "USERS"
    PCTFREE 10
    PCTUSED 40
    INITRANS 2
    MAXTRANS 255
    NOCOMPRESS LOGGING
    STORAGE
    (
    INITIAL 64K
    NEXT 1024K
    MINEXTENTS 1
    MAXEXTENTS unlimited
    PCTINCREASE 0
    FREELISTS 1
    FREELIST GROUPS 1
    BUFFER_POOL DEFAULT
    );
    В листинг 13.1 включено полное описание таблицы, содержащее физические параметры хранения.
    Перейдем теперь к описанию упрощенного синтаксиса этого предложения для СУБД Oracle, достаточно близкого к стандарту.
    13.3.1. Описание таблицы
    В приведенном синтаксисе опущены фразы, касающиеся определения физи- ческих атрибутов таблицы и их параметров, параметров хранения
    (
    TABLESPACE
    ,
    CLUSTER
    и пр.), параметров секционирования, внешних и сжа- тых таблиц, т. е. всего того, что создается СУБД по умолчанию и при жела- нии может быть изменено после детального знакомства с документацией (см. прилагаемый к книге компакт-диск). Там же можно познакомиться с синтак- сисом объектных таблиц и таблиц XML.
    При выполнении предложения
    CREATE TABLE
    создается постоянная или гло- бальная временная таблица либо путем объявления структуры, либо путем

    Часть
    V.
    Язык SQL. Создание базы данных
    246
    ссылки на существующую таблицу. Упрощенный синтаксис этого предложе- ния имеет вид:
    CREATE TABLE [ GLOBAL TEMPORARY ] TABLE [имя_схемы.]имя_таблицы
    ( { имя_столбца тип_данных[(длина)] [DEFAULT выражение]
    [ ENCRYPT [ USING 'алгоритм_шифрования' ] [ IDENTIFIED BY пароль ]
    [ [NO] SALT ] ]
    [ограничения_для_столбца] ... }
    [ , { имя_столбца тип_данных[(длина)] [DEFAULT выражение]
    [ ENCRYPT [ USING 'алгоритм_шифрования' ] [ IDENTIFIED BY пароль ]
    [ [NO] SALT ] ]
    [ограничения_для_столбца] ... } ]
    [ {, ограничение_для_таблицы } ... ] )
    [AS подзапрос]; где
    [GLOBAL TEMPORARY]
    Объявляется временная (
    GLOBAL TEMPORARY
    )таблица с глобальной областью действия. Глобальные временные таблицы доступны из всех активных сеан- сов, но они автоматически удаляются, когда завершается создавший их сеанс.
    имя_стол6ца
    Указывается имя столбца.
    тип_данных
    Связывает со столбцом с именем
    имя_столбца
    определенный тип данных.
    Для тех типов, которые позволяют указать их длину, существует дополни- тельный параметр
    длина
    ,например
    VARCHAR2(255)
    DEFAULT выражение
    Столбец будет использовать значение выражения, если предложение
    INSERT
    или
    UPDATE
    не вводит никакого значения. Выражение может представлять собой строку или число, пользовательскую или системную функцию (см.
    разд. 4.6 и 18.3), но не может содержать подзапрос, ссылки на другие столб- цы и псевдостолбцы
    CURRVAL
    ,
    NEXTVAL
    ,
    LEVEL
    и
    ROWNUM
    ENCRYPT
    Позволяет зашифровать данные столбца, имеющего один из следующих ти- пов:
    CHAR
    ,
    NCHAR
    ,
    VARCHAR2
    ,
    NVARCHAR2
    ,
    NUMBER
    и
    DATE
    USING 'алгоритм_шифрования'
    Позволяет указать один из алгоритмов шифрования данных. Если эта опция не указана, то для шифрования используется алгоритм AES (Advanced
    Encryption Standard, усовершенствованный стандарт шифрования) с 192- битовым ключом.
    IDENTIFIED BY пароль

    Глава 13. Создание базы данных и ее основных объектов
    247
    При указании пароля СУБД формирует из него ключ шифрования для этого столбца.
    [NO] SALT
    Если в шифруемых данных много повторяющихся значений и, следователь- но, их можно угадать, то для предотвращения этого к данным добавляется "соль" (salt), которая делает зашифрованные значения разными, даже если входные данные совпадают. По умолчанию "соль" применяется.
    Так как столбец с "соль" нельзя индексировать, то для создания индексируе- мого столбца необходимо указывать
    NO SALT
    ограничения_для_столбца
    Необязательный параметр, с помощью которого задается одно или несколько
    (в синтаксисе указано с помощью "
    ") ограничений целостности на значе- ния столбца (синтаксис этого выражения приведен в разд. 13.3.2).
    ограничение_для_таблицы
    Необязательный параметр, с помощью которого задаются разделенные запя- тыми ограничения целостности таблицы (синтаксис этого выражения приве- ден в разд. 13.3.2).
    AS-подзапрос
    Необязательный параметр, с помощью которого можно вставить в создавае- мую таблицу строки данных в соответствии с подзапросом; может также ис- пользоваться для копирования как описания (без ограничений целостности), так и содержимого существующей таблицы (копирование).
    13
    .3.2. Ограничения целостности
    Как уже отмечалось ранее, ограничения целостности задаются с помощью параметров
    ограничения_для_столбца
    и
    ограничение_для_таблицы
    . Они опи- сывают правила, применимые к таблицам при их создании и оговаривают допустимые значения столбцов и (или) допустимые сочетания этих значений.
    Кроме того, ряд ограничений целостности можно создавать с помощью триггеров.
    Ограничения целостности для столбца
    Синтаксис параметра
    ограничения_для_столбца
    имеет вид:
    [CONSTRAINT имя_ограничения]
    { [NOT] NULL | UNIQUE | PRIMARY KEY
    | REFERENCES [имя_схемы.]имя_таблицы [(имя_столбца)]

    Часть
    V.
    Язык SQL. Создание базы данных
    248
    [ON DELETE { CASCADE | SET NULL } ]
    | CHECK (условие_поиска) } где
    CONSTRAINT имя_ограничения
    Необязательный параметр, используемый для задания имени ограничения, если имя не задано, то СУБД присваивает ограничению свое имя, вывод ко- торого на экран при ошибке (например, отсутствии уникальности вводимого значения) резко усложняет процесс идентификации места ошибки.
    PRIMARY KEY
    Первичный ключ (не может быть назначен для столбцов с типом данных
    BLOB
    ,
    CLOB
    ,
    NCLOB
    ,
    ARRAY
    ); в столбце, объявленном первичным ключом, зна- чения уставливаются уникальными и не пустыми (
    NOT NULL
    ); по значениям такого столбца автоматически строится индекс.
    UNIQUE
    Отличается от
    PRIMARY KEY
    тем, что в связанном с ним столбце допускаются пустые (
    NULL
    ) значения.
    [NOT] NULL
    Указывает, что в этот столбец можно поместить пустое (
    NULL
    ) или некоторое непустое (
    NOT NULL
    ) значение.
    REFERENCES
    Ссылка на таблицу
    [имя_схемы.]имя_таблицы
    , в которой находится первич- ный или уникальный ключ (когда имя столбца опущено, автоматически вы- бирается первичный ключ).
    REFERENCES
    допускает ввод пустых значений (для их исключения надо одновременно вводить ограничение
    NOT NULL
    ).
    ON DELETE
    Определяет действия, которые выполняет СУБД для обеспечения ссылочной целостности внешнего ключа, когда удаляется значение связанного первич- ного или уникального ключа.
    CASCADE
    Указывает, что в том случае, если удаляется значение первичного или уникального ключа, СУБД выполняет то же самое действие над внешним ключом. Если
    ON DELETE CASCADE
    опущено, то строки с ключевыми значе- ниями в таблице с первичным или уникальным ключом не могут быть удале- ны, пока не будут удалены все ссылающиеся на них строки из данной табли- цы (таблицы с внешним ключом).
    SET NULL
    Указывает, что в случае удаления первичного или уникального ключа база данных установит значение внешнего ключа в
    NULL
    CHECK

    Глава 13. Создание базы данных и ее основных объектов
    249
    Используется для контроля данных по условию, текст которого размещается в скобках.
    CHECK
    допускает ввод пустых (
    NULL
    ) значений и не может содержать:

    запросов на обращение к другим таблицам или другим строкам данной таблицы;

    обращений к системным переменным и константам (например,
    SYSDATE
    — текущая дата).
    Ограничения целостности для таблицы
    В тех случаях, когда ограничение относится не к одному столбцу, а к их ком- бинации, используются ограничения на уровне всей таблицы (листинг 13.2).
    Синтаксис параметра
    ограничения_для_таблицы
    имеет вид:
    [ CONSTRAINT имя_ограничения ]
    { UNIQUE (имя_столбца [,имя_столбца ]...)
    | PRIMARY KEY (имя_столбца [,имя_столбца ]...)
    | FOREIGN KEY (имя_столбца [,имя_столбца ]...)
    REFERENCES [имя_схемы.]имя_таблицы [(имя_столбца[,имя_столбца ]...)]
    [ON DELETE { CASCADE | SET NULL } ]
    | CHECK (условие_поиска) } где параметры имеют тот же смысл, что и для
    ограничений_для_столбца
    Листинг 13.2. Пример создания таблицы Меню
    CREATE TABLE МЕНЮ
    (
    СТРОКА NUMBER(9) CONSTRAINT "Строка меню не уникальна !"
    PRIMARY KEY,
    КОД_ТРАПЕЗЫ NUMBER(1) NOT NULL CONSTRAINT "Номер трапезы в Меню ?"
    REFERENCES ТРАПЕЗЫ (КОД_ТРАПЕЗЫ),
    КОД_БЛЮДА NUMBER(2) NOT NULL CONSTRAINT "Код блюда в Меню ? "
    REFERENCES БЛЮДА (КОД_БЛЮДА),
    ДАТА DATE not NULL,
    CONSTRAINT "Данные строки не уникальны !" UNIQUE (КОД_ТРАПЕЗЫ,
    КОД_БЛЮДА, ДАТА)
    );
    Ограничения целостности, создаваемые триггерами
    С помощью команд
    CREATE TABLE
    и
    ALTER TABLE
    нельзя реализовать любые ограничения целостности. Например, мы не сможем обеспечить с их помощью

    Часть
    V.
    Язык SQL. Создание базы данных
    250
    такие ограничения таблицы
    Люди
    , как: "дата рождения должна быть в преде- лах от 80 лет до 15 лет" и "первые буквы фамилии, имени и отчества должны быть большими, а остальные — малыми". Действительно, в
    CHECK
    нельзя включать обращения к текущей дате (
    SYSDATE
    ) и сравнительно сложным процедурам для проверки правильности ввода, например, таких имен как
    Смирнов-Сокольский, Жан-Жак Руссо, Гай Юлий Цезарь и т. п.
    Указанные ранее и многие другие ограничения целостности можно вводить с помощью триггеров (см. часть VI). Триггер — это сочетание хранимой в базе данных программы и события, которое заставляет ее выполняться. Та- кими событиями могут быть: ввод новой строки таблицы, изменение значе- ний одного или нескольких ее столбцов и (или) удаление строки таблицы.
    При любом из этих событий автоматически запускаются один или несколько заранее созданных триггеров, которые производят проверку запрограммиро- ванных в них условий и, если они не выполняются, отменяют ввод, измене- ние или удаление, посылая об этом заранее подготовленное сообщение поль- зователю.
    Только с помощью триггеров мы сможем обеспечить "автоматическое" на- ращивание значений суррогатного первичного ключа или проверки правиль- ности ввода фамилии, как это сделано в тексте триггера
    ЛЮДИ_BIR
    в листин- ге 12.1.
    Для написания текста триггера надо овладеть языком PL/SQL (см. часть VI).
    13.3.3. Комментарии к описанию таблицы
    Для сохранения в базе данных комментария к таблице и (или) любому ее столбцу используется предложение
    COMMENT
    , синтаксис которого имеет вид:
    COMMENT ON { TABLE [ имя_схемы.]{имя_таблицы | имя_представления}
    | COLUMN [ имя_схемы.]{имя_таблицы. | имя_представления.} имя_столбца }
    IS 'текст_комментария'; где текст_комментария
    — любой набор символов (кроме апострофов), за- ключенный в апострофы (
    '
    ), длина которого не превышает 4000 байт. Пра- вила создания строковых констант описаны в разд. 4.4.3.
    Кроме предложения
    COMMENT
    для включения пояснений в любое предложение
    SQL и командные блоки PL/SQL можно либо расположить текст пояснения между парами символов /* и */, либо предварить его двумя дефисами (--).
    С помощью первого способа можно включать многострочные пояснения.
    Для включения многострочных пояснений вторым способом приходится помещать -- перед каждой их строкой. Следует заметить, что комментарии,

    Глава 13. Создание базы данных и ее основных объектов
    251
    отмеченные --, могут располагаться либо в отдельных строках, либо в кон- це строк текста комментируемого предложения (листинг 13.3).
    Листинг 13.3. Пример создания таблицы Меню
    с комментариями
    CREATE TABLE МЕНЮ
    (
    СТРОКА NUMBER(9) CONSTRAINT "Строка меню не уникальна !"
    PRIMARY KEY,
    КОД_ТРАПЕЗЫ NUMBER(1) NOT NULL CONSTRAINT "Номер трапезы в Меню ?"
    REFERENCES ТРАПЕЗЫ (КОД_ТРАПЕЗЫ),
    КОД_БЛЮДА NUMBER(2) NOT NULL CONSTRAINT "Код блюда в Меню ? "
    REFERENCES БЛЮДА (КОД_БЛЮДА),
    ДАТА DATE not NULL,
    -- табличное ограничение
    CONSTRAINT "Данные строки не уникальны !" UNIQUE (КОД_ТРАПЕЗЫ,
    КОД_БЛЮДА, ДАТА)
    );
    COMMENT ON TABLE МЕНЮ IS 'Меню, предлагаемое шеф-поваром на ...';
    COMMENT ON COLUMN МЕНЮ.СТРОКА IS 'Номер строки в меню';
    COMMENT ON COLUMN МЕНЮ.КОД_ТРАПЕЗЫ IS 'Номер трапезы';
    COMMENT ON COLUMN МЕНЮ.КОД_БЛЮДА IS 'Код блюда';
    COMMENT ON COLUMN МЕНЮ.ДАТА IS 'Меню составлено на дату';
    13.4. Изменение таблиц
    Так же, как и для создания таблиц, синтаксис их изменения для различных
    СУБД достаточно сильно отличается от стандарта, хотя в основном поддер- живает его функции. Поэтому приведем здесь упрощенный синтаксис для
    СУБД Oracle, достаточно близкий к стандарту. Опустим фразы, касающиеся изменения физических атрибутов таблицы и их параметров, параметров хра- нения (
    TABLESPACE
    ,
    CLUSTER
    и пр.), параметров секционирования, внешних и сжатых таблиц, т. е. всего того, что создается СУБД по умолчанию и при желании может быть изменено после детального знакомства с документа- цией (см. прилагаемый к книге компакт-диск). Там же можно познакомиться с синтаксисом объектных таблиц и таблиц XML.
    При выполнении предложения
    ALTER TABLE
    изменяется описание таблицы.
    Упрощенный синтаксис имеет вид:
    ALTER TABLE [имя_схемы.]имя_таблицы
    -- изменение имени таблицы
    RENAME TO новое_имя_таблицы

    Часть
    V.
    Язык SQL. Создание базы данных
    252
    -- добавление новых столбцов и их параметров
    | ADD ( { имя_столбца тип_данных[(длина)] [DEFAULT выражение]
    [ ENCRYPT [ USING 'алгоритм_шифрования' ] [ IDENTIFIED BY пароль ]
    [ [NO] SALT ] ]
    [ограничения_для_столбца] ... }
    [ , { имя_столбца тип_данных[(длина)] [DEFAULT выражение]
    [ ENCRYPT [ USING 'алгоритм_шифрования' ] [ IDENTIFIED BY пароль ]
    [ [NO] SALT ] ]
    [ограничения_для_столбца] ... } ]
    -- добавление табличных ограничений
    | ADD { ограничение_для_таблицы [ограничение_для_таблицы]... }
    -- изменение параметров столбца в существующей таблице
    | MODIFY ( { имя_столбца тип_данных[(длина)] [DEFAULT выражение]
    [ ENCRYPT [ USING 'алгоритм_шифрования' ] [ IDENTIFIED BY пароль ]
    [ [NO] SALT ] | DECRYPT ]
    [ограничения_для_столбца] ... }
    [ , { имя_столбца тип_данных[(длина)] [DEFAULT выражение]
    [ ENCRYPT [ USING 'алгоритм_шифрования' ] [ IDENTIFIED BY пароль ]
    [ [NO] SALT ] | DECRYPT ]
    [ограничения_для_столбца] ... } ]
    -- удаление и изменение параметров таблицы
    | DROP { COLUMN имя_столбца | (имя_столбца [,имя_столбца ]...) }
    [ { CASCADE CONSTRAINTS | INVALIDATE }
    [ CASCADE CONSTRAINTS | INVALIDATE ]... ]
    | MODIFY { CONSTRAINT имя_ограничения | PRIMARY KEY
    | UNIQUE (имя_столбца [,имя_столбца ]...) } ENABLE | DISABLE
    | RENAME CONSTRAINT старое_имя TO новое_имя
    | DROP { { PRIMARY KEY | UNIQUE (имя_столбца [,имя_столбца ]...) }
    [ CASCADE ] [ { KEEP | DROP } INDEX ] | CONSTRAINT имя_ограничения
    [ CASCADE ] }
    Здесь большинство параметров совпадает с аналогичными параметрами предложения
    CREATE TABLE
    и было рассмотрено в разд. 13.3. Опишем новые.
    INVALIDATE
    При указании этого ключевого слова любой объект, зависящий от удаленного объекта, становится нерабочим и неиспользуемым до перекомпиляции или следующего использования.
    {KEEP I DROP) INDEX
    Позволяет сохранить (
    KEEP
    ) или удалить (
    DROP
    ) индекс, связанный с уни- кальным или первичным ключом (листинг 13.4).

    Глава 13. Создание базы данных и ее основных объектов
    253
    Листинг 13.4. Пример создания таблицы Люди
    с ограничениями целостности,
    добавленными предложениями ALTER TABLE
    -- Предложение для создания таблицы
    --
    CREATE TABLE ЛЮДИ
    ( ИД NUMBER(6,0) NOT NULL,
    ФАМИЛИЯ NVARCHAR2(50) NOT NULL,
    ИМЯ NVARCHAR2(50) NOT NULL,
    ОТЧЕСТВО NVARCHAR2(50) NOT NULL,
    ПСЕВДОНИМ NVARCHAR2(50),
    ДАТА_РОЖДЕНИЯ DATE NOT NULL,
    ПОЛ NCHAR(1) NOT NULL,
    АДРЕС NVARCHAR2(200),
    ТЕЛЕФОН NVARCHAR2(50)
    );
    -- Описания назначения таблицы и ее столбцов
    --
    COMMENT ON TABLE ЛЮДИ IS 'Список читателей и/или создателей изданий';
    COMMENT ON COLUMN ЛЮДИ.ИД IS 'Уникальный номер человека';
    COMMENT ON COLUMN ЛЮДИ.ФАМИЛИЯ IS 'Фамилия человека';
    COMMENT ON COLUMN ЛЮДИ.ИМЯ IS 'Имя человека';
    COMMENT ON COLUMN ЛЮДИ.ОТЧЕСТВО IS 'Отчество человека';
    COMMENT ON COLUMN ЛЮДИ.ПСЕВДОНИМ IS 'Псевдоним человека';
    COMMENT ON COLUMN ЛЮДИ.ДАТА_РОЖДЕНИЯ IS 'Дата рождения человека';
    COMMENT ON COLUMN ЛЮДИ.ПОЛ IS 'Пол человека';
    COMMENT ON COLUMN ЛЮДИ.АДРЕС IS 'Адрес человека';
    COMMENT ON COLUMN ЛЮДИ.ТЕЛЕФОН IS 'Телефон человека';
    -- Предложения для изменения таблицы
    -- 1. Создание первичного ключа
    ALTER TABLE ЛЮДИ ADD CONSTRAINT "ЛЮДИ_PK" PRIMARY KEY (ИД);
    -- 2. Создание ограничения для проверки уникальности комбинации значений
    ALTER TABLE ЛЮДИ ADD CONSTRAINT "ЛЮДИ_UK" UNIQUE (ФАМИЛИЯ, ИМЯ, ОТЧЕСТВО,
    ДАТА_РОЖДЕНИЯ, ПОЛ);
    -- 3. Создание ограничения для проверки правильности описания пола
    ALTER TABLE ЛЮДИ ADD CONSTRAINT "Пол может быть М или Ж" CHECK (ПОЛ IN
    ('М','Ж'));

    Часть
    V.
    Язык SQL. Создание базы данных
    254
    13.5. Удаление таблиц
    При выполнении предложения
    DROP TABLE имя_таблицы [CASCADE CONSTRAINTS] [PURGE] удаляется указанная таблица, очищаются все ее данные, удаляются все ин- дексы и триггеры, созданные на ее основе (даже те, которые принадлежат к другим схемам), становятся недействительными все права доступа и все зависимые объекты (такие как представления, хранимые процедуры и т. п.).
    Фраза
    CASCADE CONSTRAINTS
    используется для удаления по всей базе данных всех ограничений ссылочной целостности, которые зависят от первичного или уникального ключа удаленной таблицы. Без этой фразы нельзя удалить таблицу с зависимыми ссылочными ограничениями.
    Предложение
    DROP TABLE
    эффективно для стандартных таблиц, индекс- таблиц и объектных таблиц. Удаляемая таблица перемещается в корзину, ес- ли только не указано ключевое слово
    PURGE
    , которое заставляет систему
    Oracle немедленно освободить все место, занятое таблицей.
    13.6. Создание последовательностей
    Последовательность (sequence) генерирует уникальные порядковые номера, которые могут использоваться как значения числовых столбцов таблиц базы данных. Последовательности упрощают решение многих задач, когда требу- ется генерация уникальных числовых значений для строк одной или несколь- ких таблиц.
    Для создания последовательностей используется команда
    CREATE SEQUENCE
    , упрощенный синтаксис которой имеет вид:
    CREATE SEQUENCE [схема.]имя_последовательности
    [INCREMENT BY целое_число]
    [START WITH целое_число]; где
    схема
    — это схема, в которой создается последовательность (если она опущена, то последовательность создается в схеме текущего пользователя).
    имя_последовательности
    — имя создаваемой последовательности.
    INCREMENT BY
    задает интервал между значениями последовательности. Это значение может быть любым (отличным от нуля) положительным или отри- цательным целым числом (для возрастающей или убывающей последова- тельности), по умолчанию принимается интервал, равный 1.

    Глава 13. Создание базы данных и ее основных объектов
    255
    START WITH
    определяет первый генерируемый номер последовательности (по умолчанию он равен 1).
    Для выбора следующего уникального значения последовательности исполь- зуется псевдостолбец
    имя_последовательности.NEXTVAL
    , а для текущего —
    имя_последовательности.CURRVAL
    Например, создадим последовательность с именем люди_посл для формиро- вания первичного ключа таблицы
    Люди
    (см. листинг 12.1). create sequence люди_посл start with 1 increment by 1;

    1   ...   12   13   14   15   16   17   18   19   ...   28


    написать администратору сайта