Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основное / Письменные лекции по дисциплине «Базы данных».docx
Скачиваний:
89
Добавлен:
29.11.2021
Размер:
713.33 Кб
Скачать

2.8. Изменение таблицы

Переименование таблицы:

ALTER TABLE "Все заказы(кп)"

RENAME TO "Все заказы(кп1)"

Аналогичный результат может быть получен следующим образом:

RENAME "Все заказы(кп)" TO "Все заказы(кп1)"

Добавление нового поля:

ALTER TABLE "Клиент(кп)"

ADD ( "Образование" CHAR(20) )

Удаление поля:

ALTER TABLE "Клиент(кп)"

DROP ("Образование")

Переименование поля:

ALTER TABLE "Клиент(кп)"

RENAME column "Образование" TO "Степень"

2.9. Типы данных MySql

Числовые данные — это все целые числа (без дробной части) и вещественные числа (с дробной частью).

Строковые данные — последовательность символов, заключенная в кавычки. В MySQL в качестве стандарта используются одинарные кавычки и для совместимости с другими базами данных рекомендуется именно их использование.

Календарные данные — тип для обозначение даты и времени, принимает различные формы, например строковую «2007-11-23» или числовую 20071123. Особенностью этого типа данных является их хранение в едином внутреннем формате, что позволяет производить операции сложения и вычитания, в независимости от внешнего представления.

NULL — специальный тип данных, означает отсутствие информации.

  • Числовые данные делятся на точечные (это BOOLEAN, INTEGER, DECIMAL) и приближенные (FLOAT, REAL, DOUBLE PRECISION).

  • Одни из основных строковых типов данных: CHAR(N) (строгий реальный размер: не больше, не меньше заданного N), VARCHAR(N) (нестрогий реальный размер: не больше заданного N) и TEXT (нестрогий реальный размер вплоть до 2^16-1 символов).

  • Одни из основных календарных типов данных: DATE (от '1000-01-01' до '9999-12-31'), TIME (от '-828:59:59' до '828:59:59') и DATETIME (от '1000-01-01 00:00:00' до '9999-12-31 00:00:00').

Подробнее: https://kbss.ru/blog/bd_mysql/153.html

2.10. Параллелизм

Параллелизм — возможность параллельной обработки в СУБД многих параллельных транзакций к одним и тем же данным в одно и то же время.

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

Лекция 3. Хранимые процедуры и функции

  • Хранимая процедура MySQL;

  • Переменные;

  • Параметры процедуры;

  • Операторы IF и CASE;

  • Оператор RETURN.

3.1. Хранимая процедура MySql

Хранимая процедура MySQL представляет собой подпрограмму, которая хранится в базе данных. Она содержит имя, список параметров и операторы SQL. Все популярные системы управления базами данных поддерживают хранимые процедуры. Они были введены в MySQL 5.

Существует два типа процедур (подпрограмм): хранимые процедуры (не возвращающие значения) и функции, возвращающие значения, которые используются в операторах SQL (например, pi()).

Основное отличие заключается в том, что функции могут использоваться как любое выражение в операторах SQL (простой вызов: pi()), а хранимые процедуры должны вызываться с помощью оператора CALL (CALL proc).

По умолчанию процедура связана с базой данных, используемой в данный момент. Чтобы связать процедуру с конкретной базой данных, нужно указать её при создании хранимой процедуры:

имя_базы_данных.имя_хранимой_процедуры

Полный синтаксис

CREATE [DEFINER = { user | CURRENT_USER }]

PROCEDURE имя_процедуры ([параметры_процедуры[,...]])

[характеристики ...] тело_подпрограммы

параметры_процедуры: [ IN | OUT | INOUT ] имя_параметра type

type: Любой валидный тип данных MySQL

характеристики: COMMENT 'string'

| LANGUAGE SQL

| [NOT] DETERMINISTIC

| { CONTAINS SQL | NO SQL | READS SQL DATA

| MODIFIES SQL DATA }

| SQL SECURITY { DEFINER | INVOKER }

тело_подпрограммы: Валидный оператор программы SQL

Можно ещё внутрь хранимой функции и хранимой процедуры добавлять ключевые слова BEGIN и END для того, чтобы выделить тело подпрограммы.

IN — параметр на вход (чтение), OUT — параметр на выход (запись), INOUT — параметр, который будет меняться в течение выполнения процедуры (и чтение, и запись).

Достоинства хранимой процедуры:

— упрощает управление кодом;

— позволяет ограничить доступ к данным в таблицах и уменьшить вероятность нежелательных действий в отношении этих данных;

— обычно выполняются быстрее, чем обычные SQL-инструкции, так как код процедур компилируется один раз при первом ее запуске, а затем сохраняется в скомпилированной форме.

Перед тем, как осуществить вызов хранимой процедуры, необходимо получить определенную информацию.

Проверка версии MySQL

mysql>SELECT VERSION();

+-----------+

| VERSION() |

+-----------+

| 5.6.12 |

+-----------+

1 row in set (0.00 sec)

Разделитель — символ или строка символов, которая используется для закрытия оператора SQL. По умолчанию в качестве разделителя используется точка с запятой (;). Но это вызывает проблемы в хранимых процедурах и триггерах MySQL, поскольку она может иметь много операторов, и каждый должен заканчиваться точкой с запятой. Поэтому в качестве разделителя будем использовать двойной знак доллара — $$. Чтобы позже снова использовать в качестве разделителя ; выполните команду DELIMITER ; $$. Ниже приведен код для смены разделителя:

mysql> DELIMITER $$ ;

Теперь DELIMITER по умолчанию — $$.

mysql> DELIMITER ; $$

Теперь DELIMITER по умолчанию — ;.

Пример процедуры MySQL:

mysql> DELIMITER $$;

mysql> CREATE PROCEDURE job_data()

-> SELECT * FROM JOBS; $$

Query OK, 0 rows affected (0.00 sec)

Пояснение:

  • Команда CREATE PROCEDURE создает хранимую процедуру;

  • Следующая часть — это имя процедуры job_data;

  • Имена процедур не чувствительны к регистру, поэтому job_data равносильно JOB_DATA;

  • Нельзя использовать две процедуры с одним именем в одной и той же базе данных.

  • Можно использовать имена в формате имя_процедуры.имя_базы_данных, например, hr.job_data.

  • Имена процедур могут быть разделены. Если имя разделено, оно может содержать пробелы.

  • Максимальная длина имени процедуры составляет 64 символа.

  • Избегайте использования имен встроенных функций MySQL.

  • Последняя часть CREATE PROCEDURE — это пара скобок содержит список параметров. Поскольку эта процедура не имеет никаких параметров, список пуст.

Следующая часть SELECT * FROM JOBS; $$ — это последний оператор в синтаксисе хранимых процедур MySQL. Точка с запятой здесь не является обязательной, так как реальным окончанием оператора является $$.

Вызов процедуры:

CALL имя_процедуры([параметр [, ...]])

CALL имя_процедуры[()]

MySQL хранимые процедуры, которые не принимают аргументов, могут вызываться без скобок. Поэтому CALL job_data() равносильно CALL job_data.

Создание функции происходит следующим образом:

CREATE FUNCTION имя_функции ([параметр_функции [, ...]])

RETURNS тип [характеристика ...] тело_подпрограммы

Удаление процедуры/функции используется для сброса в MySQL вызванной хранимой процедуры или функции.

DROP {PROCEDURE | FUNCTION} [IF EXISTS] имя_процедуры