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

  • Как создать представление

  • Чем отличаются объявление от работы с процедурами и функциями

  • Синтаксис команды процедур и функций.

  • Как удалить процедуру и функцию

  • Что такое триггеры

  • Что такое курсоры

  • ПРИЛОЖЕНИЕ Синтаксис оператора

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

  • Проектирование. 380305БИ_Проектирование баз данных_лабораторные_ПоповВБ.docx. Лабораторная работа 1. Интерфейс субд mysql. Предоставление доступа и привилегий. Утилиты, входящие в состав субд цель работы


    Скачать 1.15 Mb.
    НазваниеЛабораторная работа 1. Интерфейс субд mysql. Предоставление доступа и привилегий. Утилиты, входящие в состав субд цель работы
    АнкорПроектирование
    Дата11.12.2022
    Размер1.15 Mb.
    Формат файлаdocx
    Имя файла380305БИ_Проектирование баз данных_лабораторные_ПоповВБ.docx.docx
    ТипЛабораторная работа
    #839179
    страница12 из 14
    1   ...   6   7   8   9   10   11   12   13   14

    Пример выполнения


    1. Что такое представление и как оно реализовано?

    Представления (views) можно сравнить с временными таблицами, наполненными динамически формируемым содержимым. В настоящей реализации есть две возможности создания представлений: с использованием алгоритма временных таблиц MySQL и с созданием самостоятельной таблицы. Нас интересует именно второй способ (первый был реализован, скорее всего, исходя из соображений совместимости и унификации). Такие представления позволяют значительно снизить объём кода, в котором часто повторялись простые объединения таблиц. К ним (после создания) применимы любые запросы, возвращающие результат в виде набора строк. То есть команды SELECT, UPDATE, DELETE, можно применять так же, как и к реальным таблицам. Важно и то, что посредством представлений можно более гибко распоряжаться правами пользователей базы данных, так как в этом случае есть возможность предоставлять доступ на уровне отдельных записей различных таблиц.

    1. Как создать представление?

    Для создания представлений используется команда CREATE VIEW

    Синтаксис команды CREATE VIEW

    CREATE

    [OR REPLACE]

    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

    [DEFINER = { user | CURRENT_USER }]

    [SQL SECURITY { DEFINER | INVOKER }]

    VIEW view_name [(column_list)]

    AS select_statement

    [WITH [CASCADED | LOCAL] CHECK OPTION]

    1. Чем отличаются объявление от работы с процедурами и функциями?

    Объявление и работа с процедурами и функциями отличаются в следующем:

    • в заголовке функции помимо описания формальных параметров обязательно указывается тип возвращаемого ею результата;

    • для возврата функцией значения в точку вызова среди ее операторов должен быть хотя бы один, в котором имени функции или переменной Result присваивается значение результата;

    • вызов процедуры выполняется отдельным оператором;

    • вызов функции может выполняться там, где допускается ставить выражение, в частности, в правой части оператора присваивания.




    1. Синтаксис команды процедур и функций.


    CREATE

    [DEFINER = { user | CURRENT_USER }]

    PROCEDURE sp_name ([proc_parameter[,...]])

    [characteristic ...] routine_body
    CREATE

    [DEFINER = { user | CURRENT_USER }]

    FUNCTION sp_name ([func_parameter[,...]])

    RETURNS type

    [characteristic ...] routine_body

    proc_parameter:

    [ IN | OUT | INOUT ] param_name type

    func_parameter:

    param_name type
    type:

    Any valid MySQL data type
    characteristic:

    LANGUAGE SQL

    | [NOT] DETERMINISTIC

    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

    | SQL SECURITY { DEFINER | INVOKER }

    | COMMENT 'string'
    routine_body:


    1. Как удалить процедуру и функцию?


    DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

    1. Как вызвать процедуру и функцию?


    CALL sp_name([parameter[,...]])

    CALL sp_name[()]

    Оператор CALL позволяет вызвать ранее определенную процедуру.

    1. Что такое триггеры?

    Триггер — это хранимая процедура особого типа, которую пользователь не вызывает непосредственно, а исполнение которой обусловлено наступлением определенного события (действием) — по сути добавлением INSERT или удалением DELETE строки в заданной таблице, или модификации UPDATE данных в определенном столбце заданной таблицы реляционной базы данных. Триггеры применяются для обеспечения целостности данных и реализации сложной бизнес-логики.


    1. Что такое курсоры?

    Курсор — в некоторых реализациях языка программирования SQL (Oracle, Microsoft SQL Server) — получаемый при выполнении запроса результирующий набор и связанный с ним указатель текущей записи.

    ПРИЛОЖЕНИЕ
    Синтаксис оператора CREATE TABLE


    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]

    [table_options] [select_statement]
    create_definition:

    col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]

    [PRIMARY KEY] [reference_definition]

    или PRIMARY KEY (index_col_name,...)

    или KEY [index_name] (index_col_name,...)

    или INDEX [index_name] (index_col_name,...)

    или UNIQUE [INDEX] [index_name] (index_col_name,...)

    или FULLTEXT [INDEX] [index_name] (index_col_name,...)

    или [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)

    [reference_definition]

    или CHECK (expr)

    type:

    TINYINT[(length)] [UNSIGNED] [ZEROFILL]

    или SMALLINT[(length)] [UNSIGNED] [ZEROFILL]

    или MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]

    или INT[(length)] [UNSIGNED] [ZEROFILL]

    или INTEGER[(length)] [UNSIGNED] [ZEROFILL]

    или BIGINT[(length)] [UNSIGNED] [ZEROFILL]

    или REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]

    или DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]

    или FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]

    или DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]

    или NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]

    или CHAR(length) [BINARY]

    или VARCHAR(length) [BINARY]

    или DATE

    или TIME

    или TIMESTAMP

    или DATETIME

    или TINYBLOB

    или BLOB

    или MEDIUMBLOB

    или LONGBLOB

    или TINYTEXT

    или TEXT

    или MEDIUMTEXT

    или LONGTEXT

    или ENUM(value1,value2,value3,...)

    или SET(value1,value2,value3,...)

    index_col_name:

    col_name [(length)]
    reference_definition:

    REFERENCES tbl_name [(index_col_name,...)]

    [MATCH FULL | MATCH PARTIAL]

    [ON DELETE reference_option]

    [ON UPDATE reference_option]

    reference_option:

    RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT

    table_options:

    TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM }

    Оператор CREATE TABLE создает таблицу с заданным именем в текущей базе данных.

    Для всех имен баз данных, таблиц, столбцов, индексов и псевдонимов в MySQL приняты одни и те же правила.

    Следует отметить, что эти правила были изменены, начиная с версии MySQL 3.23.6, когда было разрешено брать в одиночные скобки (') идентификаторы (имена баз данных, таблиц и столбцов). Двойные скобки (") тоже допустимы - при работе в режиме ANSI SQL.

    Идентификатор

    Макс. длина строки

    Допускаемые символы

    База данных

    64

    Любой символ, допустимый в имени каталога, за исключением (/) или (.)

    Таблица

    64

    Любой символ, допустимый в имени файла, за исключением (/) или (.)

    Столбец

    64

    Все символы

    Псевдоним

    255

    Все символы

    Если нет активной текущей базы данных или указанная таблица уже существует, то возникает ошибка выполнения команды.

    В версии MySQL 3.22 и более поздних имя таблицы может быть указано как db_name.tbl_name. Эта форма записи работает независимо от того, является ли указанная база данных текущей.

    В версии MySQL 3.23 при создании таблицы можно использовать ключевое слово TEMPORARY. Временная таблица автоматически удаляется по завершении соединения, а ее имя действительно только в течение данного соединения. Это означает, что в двух разных соединениях могут использоваться временные таблицы с одинаковыми именами без конфликта друг с другом или с существующей таблицей с тем же именем (существующая таблица скрыта, пока не удалена временная таблица). В версии MySQL 4.0.2 для создания временных таблиц необходимо иметь привилегии CREATE TEMPORARY TABLES.

    В версии MySQL 3.23 и более поздних можно использовать ключевые слова IF NOT EXISTS для того, чтобы не возникала ошибка, если указанная таблица уже существует. Следует учитывать, что при этом не проверяется идентичность структур этих таблиц.

    Каждая таблица tbl_name представлена определенными файлами в директории базы данных. В случае таблиц типа MyISAM - это следующие файлы:


    Файл

    Назначение

    tbl_name.frm

    Файл определения таблицы

    tbl_name.MYD

    Файл данных

    tbl_name.MYI

    Файл индексов

    Чтобы получить более полную информацию о свойствах различных типов столбцов, см. документацию к СУБД.

    Если не указывается ни NULL, ни NOT NULL, то столбец интерпретируется так, как будто указано NULL.

    Целочисленный столбец может иметь дополнительный атрибут AUTO_INCREMENT. При записи величины NULL (рекомендуется) или 0 в столбец AUTO_INCREMENT данный столбец устанавливается в значение value+1, где value представляет собой наибольшее для этого столбца значение в таблице на момент записи. Последовательность AUTO_INCREMENT начинается с 1. Если удалить строку, содержащую максимальную величину для столбца AUTO_INCREMENT, то в таблицах типа ISAM или BDB эта величина будет восстановлена, а в таблицах типа MyISAM или InnoDB - нет. Если удалить все строки в таблице командой DELETE FROM table_name (без выражения WHERE) в режиме AUTOCOMMIT, то для таблиц всех типов последовательность начнется заново.

    Примечание: в таблице может быть только один столбец AUTO_INCREMENT, и он должен быть индексирован. Кроме того, версия MySQL 3.23 будет правильно работать только с положительными величинами столбца AUTO_INCREMENT. В случае внесения отрицательного числа оно интерпретируется как очень большое положительное число. Это делается, чтобы избежать проблем с точностью, когда числа ''заворачиваются'' от положительного к отрицательному и, кроме того, для гарантии, что по ошибке не будет получен столбец AUTO_INCREMENT со значением 0.

    Величины NULL для столбца типа TIMESTAMP обрабатываются иначе, чем для столбцов других типов. В столбце TIMESTAMP нельзя хранить литерал NULL; при установке данного столбца в NULL он будет установлен в текущее значение даты и времени. Поскольку столбцы TIMESTAMP ведут себя подобным образом, то атрибуты NULL и NOT NULL неприменимы в обычном режиме и игнорируются при их задании. С другой стороны, чтобы облегчить клиентам MySQL использование столбцов TIMESTAMP, сервер сообщает, что таким столбцам могут быть назначены величины NULL (что соответствует действительности), хотя реально TIMESTAMP никогда не будет содержать величины NULL. Это можно увидеть, применив DESCRIBE tbl_name для получения описания данной таблицы. Следует учитывать, что установка столбца TIMESTAMP в 0 не равнозначна установке его в NULL, поскольку 0 для TIMESTAMP является допустимой величиной.

    Величина DEFAULT должна быть константой, она не может быть функцией или выражением. Если для данного столбца не задается никакой величины DEFAULT, то MySQL автоматически назначает ее. Если столбец может принимать NULL как допустимую величину, то по умолчанию присваивается значение NULL. Если столбец объявлен как NOT NULL, то значение по умолчанию зависит от типа столбца: для числовых типов, за исключением объявленных с атрибутом AUTO_INCREMENT, значение по умолчанию равно 0. Для столбца AUTO_INCREMENT значением по умолчанию является следующее значение в последовательности для этого столбца.

    Для типов даты и времени, отличных от TIMESTAMP, значение по умолчанию равно соответствующей нулевой величине для данного типа. Для первого столбца TIMESTAMP в таблице значение по умолчанию представляет собой текущее значение даты и времени.

    Для строковых типов, кроме ENUM, значением по умолчанию является пустая строка. Для ENUM значение по умолчанию равно первой перечисляемой величине (если явно не задано другое значение по умолчанию с помощью директивы DEFAULT).

    Значения по умолчанию должны быть константами. Это означает, например, что нельзя установить для столбца ''даты'' в качестве значения по умолчанию величину функции, такой как NOW() или CURRENT_DATE.

    KEY является синонимом для INDEX.

    В MySQL ключ UNIQUE может иметь только различающиеся значения. При попытке добавить новую строку с ключом, совпадающим с существующей строкой, возникает ошибка выполнения команды.

    PRIMARY KEY представляет собой уникальный ключ KEY с дополнительным ограничением, т.е. столбцы с данным ключом должны быть определены как NOT NULL. В MySQL этот ключ называется PRIMARY (первичный). Таблица может иметь только один первичный ключ PRIMARY KEY. Если PRIMARY KEY отсутствует в таблицах, а некоторое приложение запрашивает его, то MySQL может превратить в PRIMARY KEY первый ключ UNIQUE, не имеющий ни одного столбца NULL.

    PRIMARY KEY может быть многостолбцовым индексом. Однако нельзя создать многостолбцовый индекс, используя в определении столбца атрибут ключа PRIMARY KEY. Именно таким образом только один столбец будет отмечен как первичный. Необходимо использовать синтаксис PRIMARY KEY(index_col_name, ...).

    Если ключ PRIMARY или UNIQUE состоит только из одного столбца и он принадлежит к числовому типу, то на него можно сослаться также, как на _rowid (новшество версии 3.23.11).

    Если индексу не назначено имя, то ему будет присвоено первое имя в index_col_name, возможно, с суффиксами (_2, _3, ...), делающими это имя уникальным. Имена индексов для таблицы можно увидеть, используя SHOW INDEX FROM tbl_name. SHOW Syntax.

    С помощью выражения col_name(length) можно указать индекс, для которого используется только часть столбца CHAR или VARCHAR. Это поможет сделать файл индексов намного меньше.

    Индексацию столбцов BLOB и TEXT поддерживают только таблицы с типом MyISAM. Назначая индекс столбцу с типом BLOB или TEXT, всегда НЕОБХОДИМО указывать длину этого индекса:

    CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));

    В версии MySQL 3.23.23 и более поздних можно создавать также специальные индексы FULLTEXT. Они применяются для полнотекстового поиска. Эти индексы поддерживаются только таблицами типа MyISAM, и они могут быть созданы только из столбцов VARCHAR и TEXT. Индексирование всегда выполняется для всего столбца целиком, частичная индексация не поддерживается. Более подробно эта операция описана в разделе MySQL section.

    Выражения FOREIGN KEY, CHECK и REFERENCES фактически ничего не делают. Они введены только из соображений совместимости, чтобы облегчить перенос кода с других SQL-серверов и запускать приложения, создающие таблицы со ссылками.

    Для каждого столбца NULL требуется один дополнительный бит, при этом величина столбца округляется в большую сторону до ближайшего байта.

    Максимальную длину записи в байтах можно вычислить следующим образом:

    длина записи = 1+

    + (сумма длин столбцов)+

    + (количество столбцов с допустимым NULL + 7)/8+

    + (количество столбцов с динамической длинной).

    Опции table_options и SELECT реализованы только в версиях MySQL 3.23 и выше. Ниже представлены различные типы таблиц:

    Тип таблицы

    Описание

    BDB

    Таблицы с поддержкой транзакций и блокировкой страниц

    HEAP

    Данные для этой таблицы хранятся только в памяти

    ISAM

    Оригинальный обработчик таблиц

    InnoDB

    Таблицы с поддержкой транзакций и блокировкой строк. See section

    MERGE

    Набор таблиц MyISAM, используемый как одна таблица. See section

    MRG_MyISAM

    Псевдоним для таблиц MERGE

    MyISAM

    Новый обработчик, обеспечивающий переносимость таблиц в бинарном виде, который заменяет ISAM. See section
    1   ...   6   7   8   9   10   11   12   13   14


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