Лекция 12. Запросы манипулирования данными (DML). Специальные запросы. Запросы управления транзакциями (TCL). Запросы контроля данных (DCL). С помощью.

Презентация:



Advertisements
Похожие презентации
Администрирование и безопасность MySQL. Создание и удаление пользователей Под учетной записью пользователя MySQL подразумевается строка в таблице user.
Advertisements

Основы SQL Запросы к базе данных. Что такое база данных SQL? SQL (Structured Query Language - «Структурированный язык запросов») - универсальный компьютерный.
СУБД Microsoft Access 2003 Элементы языка SQL. Язык SQL SQL (Structured Query Language) – структурированный язык запросов Язык SQL применяется во многих.
СУБД Access Запросы Автор: Тутыгин В.С.. Назначение запросов Запросы обеспечивают простой доступ к определенному подмножеству записей одной или нескольких.
СУБД 5. SQL для выборки данных. 2 SELECT Обработка элементов оператора SELECT выполняется в следующей последовательности: FROM – определяются имена используемых.
Тема 6. Технология разработки реляционной модели данных Вопросы 1.Объекты реляционных БД, терминология 2.Разработка структуры БД 3.Нормализация отношений.
Презентация на тему: Ключевое слово TOP n [PERCENT] [WITH TIES]
Содержание: 1. Управление данными. а) Извлечение данных команда SELECT; б) Полный список разделов. 2. Раздел SELECT. а) Синтаксис раздела SELECT; б) Ключевые.
Объединение таблиц Подзапросы. Оператор SELECT дает возможность выборки информации сразу из нескольких таблиц, которые перечислены в списке FROM. Такая.
Выполнение запросов, создание и редактирование отчета MS Access.
«ИЗМЕНЕНИЕ ДАННЫХ В БД» Выполнил: студент 722 группы Специальности Информационные системы (по отрослям) Токарев Виктор.
СУБД 7. Использование подзапросов в языке запросов SQL.
Построение запросов в Access. Преимущества запросов Они позволяют собирать воедино информацию из нескольких таблиц, учитывая связи, установленные между.
Выражения унарные (унарный минус) арифметические (+, -, *, /) сравнения (, =, =, , LIKE, BETWEEN...) конкатенации (||) логические (NOT, AND, OR)
Модели транзакций Журнализация и буферизация. Зачем нужна буферизация Если бы запись об изменении базы данных, которая должна поступить в журнал при выполнении.
Технология хранения, поиска и сортировки информации в базах данных
Запросы в базе данных. Понятия запроса При работе с таблицами можно в любой момент выбрать из базы данных необходимую информацию с помощью запросов. Запрос.
Язык QBE Язык QBE -общая характеристика Табличный двумерный язык, основанный на реляционном исчислении. Декларативный язык. Язык четвертого поколения (4.
Лекция 25 Лекция 25 Понятие целостности базы данных. Условия целостности. Транзакции. Обработка транзакций. Свойства транзакций. Модель ANSI/ISO. Назначение.
Язык SQL Операторы манипулирования данными. Операции манипулирования данными DELETE операция удаления записей INSERT операция добавления или ввода новых.
Транксрипт:

Лекция 12. Запросы манипулирования данными (DML). Специальные запросы. Запросы управления транзакциями (TCL). Запросы контроля данных (DCL). С помощью запросов действий (DML) пользователь может изменять или переносить данные в таблицах, обновлять, добавлять или удалять группы записей, а также создавать новые таблицы. Некоторые возможности редактирования существуют и в запросах выборки, т. е. изменения, сделанные в запросе, автоматически переносятся на базовые таблицы запроса. Но редактируемыми могут быть только некоторые запросы. Это простые однотабличные запросы выборки без применения предикатов, группировки и агрегатных функций. Существуют четыре запроса действий: на добавление, удаление, обновление записей и на создание таблицы.

Запрос на обновление С помощью запроса на обновление можно изменить группу записей, отобранных по заданному критерию. Инструкция запроса на обновление имеет формат вида: UPDATE SET = (, NULL} [ SET = {, NULL }... ] [WHERE ] Новые значения полей в записях могут быть пустыми (NULL) либо вычисляться в соответствии с арифметическим выражением. Правила записи арифметических и логических выражений аналогичны соответствующим правилам для вычисляемых полей. Например: UPDATE Товары SET Наименование = "Pent-III 800", Цена = Цена WHERE Наименование = "Pent-III 350";

Запрос на добавление С помощью запроса на добавление записи одной таблицы (все или отобранные запросом) можно добавить в конец другой таблицы либо просто добавить в таблицу всего одну запись, состоящую из литералов. Соответственно запрос па добавление имеет форматы двух видов: INSERT INTO [( )] VALUES ( ) и INSERT INTO [( )]

В первом формате инструкция INSERT выполняет ввод одной записи, для которой значения полей задаются литерами или выражениями. Порядок перечисления полей должен соответствовать порядку значений, перечисленных в списке значений фразы VALUES. При явном перечислении можно опускать задание некоторых полей. Если список полей опущен, то в списке значений должны быть перечислены все значения в порядке следования полей таблицы. Во втором формате инструкция INSERT предназначена для добавления записей, отобранных из другой таблицы с помощью инструкции SELECT (таблицы должны быть разными). Здесь также необходимо обеспечить соответствие полей (типов и размеров полей или, по крайней мере, возможность полноценной конвертации данных), перечисленных как после оператора INSERT INTO, так и после SELECT. Например: INSERT INTO Товары(Наименование, Цена) VALUES ("Pent II 233", 450); INSERT INTO Клиенты(Фамилия, Имя, Отчество) SELECT Фамилия, Имя, Отчество FROM Поставщики WHERE Город = "Минск";

Запрос на удаление С помощью запроса на удаление можно сразу удалить группу записей, удовлетворяющих определенному критерию. Этот запрос особенно эффективен при удалении большого числа записей. С помощью запроса на удаление можно явно удалить записи только из одной таблицы. Но если было определено каскадное удаление, то будут также удалены связанные записи из подчиненных таблиц. Запрос на удаление имеет форму вида: DELET FROM [WHERE ] Если необязательная фраза WHERE опущена, т. е. условие отбора удаляемых записей отсутствует, удалению подлежат все записи таблицы. Например: DELET FROM Товары WHERE Наименование LIKE "Celeron*";

Запрос на создание новой таблицы С помощью этого запроса можно создать новую таблицу на основе уже существующей и перенести в нее все или удовлетворяющие некоторому критерию записи. Новая таблица будет иметь ту же структуру Обычно этот запрос применяется для создания архивных копий таблиц. Запрос на создание новой таблицы имеет формат вида: SELECT INTO FROM [WHERE ] В новую таблицу будут перенесены поля, перечисленные в списке полей инструкции SELECT, для всех записей, удовлетворяющих условию SELECT Клиенты.Фамилия, Клиенты.Имя, Клиенты.Отчество INTO Совершеннолетние FROM Клиенты WHERE Клиенты.[дата рождения]

СПЕЦИАЛЬНЫЕ ЗАПРОСЫ Перекрестные запросы Инструкция TRANSFORM служит для создания перекрестных запросов Они позволяют создавать перекрестные (сводные) таблицы, в которых можно было бы просмотреть зависимость некоторых данных от двух параметров, один из них откладывается по строкам, а другой - по столбцам. В общем случае инструкция TRANSFORM записывается следующим образом: TRANSFORM SELECT PIVOT К примеру, нам надо определить объем выручки от продажи каждого товара по месяцам. Тогда каждая строка полученной таблицы будет соответствовать определенному товару, в качестве столбцов будут названия месяцев, а в ячейках таблицы будут представлены соответствующие объемы продаж.

Товар Янв.2007Февр. 2007Март 2007Апр Молоко Мясо Птица Рыба Перекрестная таблица

TRANSFORM Sum(Заказы.Цена*Заказы. Количество) AS СуммаПоТовару SELECT Товары.Товар FROM Товары INNER JOIN Заказы ON Товары.КодТовара = Заказы.КодТовара WHERE Заказы. [Дата заказа] BETWEEN#2002/1/1 # And #2002/30/4# GROUP BY Товары.Товар PIVOT Format([Дата заказа], "mmm yyy"); В выражении PIVOT также можно применить функцию Datepart ("m",[ДатаРазмещения],1,0), возвращающую номер месяца.

Запрос на объединение Оператор UNION позволяет объединить выходные наборы нескольких инструкций в одну результирующую таблицу (так называемое вертикальное объединение). Этот запрос является аналогом операции объединения отношений К = А U В в реляционной алгебре. При объединении записи, возвращаемые второй и последующими инструкциями SELECT, будут дописываться в конец первой, причем из результата выборки по умолчанию будут исключаться повторяющиеся записи. В выходных наборах всех инструкций SELECT должно быть одинаковое количество полей с одинаковыми характеристиками (последнее требование в некоторых СУБД не является обязательным). В крайнем случае некоторую инструкцию SELECT можно дополнить строковыми константами или вычисляемыми полями. В качестве заголовков столбцов для выходного набора будут приниматься имена полей первой инструкции. Для выполнения сортировки результирующего набора данных объединение может дополняться фразой ORDER BY, которая записывается в конце последней инструкции SELECT:

SELECT Фамилия & " " & Имя & " " & Отчество AS Название, Город FROM Клиенты UNION SELECT Поставщик, Город FROM Поставщики ORDER BY Название, Город; Кроме UNION в стандарте SQL включены еще две операции реляционной алгебры: исключения - ЕХСЕРТ (аналог операции разности К= А - В. Отношение К включает записи, присутствующие в А и отсутствующие в В) и пересечения - INTERSECT(аналог операции пересечения К = А п В. Отношение K включает записи, присутствующие как в А, так и в В). Как и для объединения, операнды(таблицы) этих операций должны содержать соответствующий по типам набор полей. Чтобы запретить удаление повторяющихся строк, вместо слова UNION нужно использовать выражение UNION ALL

SELECT * FROM Orders WHERE amount=(SELECT MAX(amount)FROM Orders) UNION SELECT * FROM Orders WHERE amount=(SELECT MIN(amount)FROM Orders) ORDER BY id;

Управление транзакциями (TCL). Транзакцией называется логическая единица работы, состоящая из одной или более инструкций SQL, которые с точки зрения воздействия на БД рассматриваются и обрабатываются системой как единое неделимое действие. Результаты действия всех инструкций, входящих в транзакцию, либо полностью принимаются, либо полностью отвергаются. Обычно в SQL транзакция автоматически запускается любым оператором манипулирования данными либо вызовом оператора BEGIN TRANSACTION. Завершение транзакции может быть выполнено одним из следующих действий: а) вызовом оператора COMMIT, означающим успешное завершение транзакции. После него все изменения в таблицах БД гарантированно фиксируются во внешней памяти; б) вызовом оператора ROLLBACK, означающим откат транзакции, в результате чего выполняется откат всех изменений в БД, внесенных при выполнении этой транзакции; в) выходом из процедуры, содержащей несколько инструкций SQL.

В последнем случае, если при выполнении всех входящих в процедуру инструкций SQL не произойдет ни одной ошибки, то будет автоматически вызван оператор COMMIT, в противном случае - ROLLBACK. С помощью оператора SET TRANSACTION можно установить тип транзакции (READ ONLY или READ WRITE) и уровень изоляции данных, необходимый для того, чтобы гарантировать отсутствие конфликтных ситуаций при параллельном выполнении нескольких транзакций. Точнее, требуется, чтобы обновления, выполняемые данной транзакцией T1, не были доступны для любой другой транзакции T2 до тех и только до тех пор, пока не будет завершено выполнение транзакции T1. Можно задать следующие уровни изоляции данных: READ UNCOMMITED (незавершенное считывание), READ COMMITED (завершенное считывание), REPEATABLE (повторяемое считывание), SERIALIZABLE. Полная безопасность данных гарантируется только при использовании уровня SERIALIZABLE (способность к упорядочению), который предусматривает составление сериального плана выполнения параллельных транзакций.

Управление доступом к данным(DCL) Каждая СУБД должна предоставлять механизм, гарантирующий, что доступ к БД смогут получить только те пользователи, которые имеют на что соответствующее разрешение. Язык SQL включает два оператора GRANT и REVOKE, предназначенные для защиты данных от неавторизованного доступа. Применяемый механизм защиты основан на использовании идентификаторов пользователей, предоставляемых им прав владения и привилегий. Каждому пользователю БД назначается собственный идентификатор (обычно определяется именем пользователя и паролем), который применяется для определения того, на какие объекты БД может ссылаться данный пользователь, а также какие операции с этими объектами он имеет право выполнять. Таким образом, каждый оператор SQL выполняется от имени некоторого пользователя исходя из назначенных ему прав доступа (привилегий).

Каждый объект в SQL имеет своего владельца (часто пользователя, который его создал). Только владелец имеет полный доступ к объекту. Для предоставления прав доступа другим пользователям к этому объекту применяется оператор GRANT, имеющий следующий формат: GRANT { | ALL PRIVILEGES} ON | PUBLIC} [WITH GRANT OPTIONS] В SQL определен следующий набор привилегий, позволяющий: SELECT- просматривать данные; INSERT [ ] - добавлять данные; UPDATE [ ] - обновлять данные; DELETE - удалять данные; REFERENCE [ ] - ссылаться на указанные поля при делении ссылочной целостности; USAGE - использовать домены и ограничители целостности.

После списка идентификаторов пользователей можно указать опцию WITH GRANT OPTIONS, которая позволит этим пользователям в свою очередь назначать привилегии другим пользователям. Таким образом, владелец может четко контролировать, кто получил права доступа к объекту и какие права доступа ему предоставлены. Для отмены указанных привилегий применяется оператор REVOKE: REVOKE [GRANT OPTION FOR] { | ALL PRIVILEGES} ON FROM { | PUBLIC } [RESTRICT | CASCADE] Опция GRANT OPTION FOR позволяет для всех заданных привилегий отменять возможность их передачи другим пользователям.

Регистрация пользователя Чтобы создать учетную запись пользователя, выполните команду: CREAT USER [IDENTIFIED BY [PASSWORD] ' ']; Обязательным параметром этой команды является идентификатор нового пользователя. Если не задан параметр IDENTIFIED BY, то будет использоваться пустой пароль. Параметр PASSWORD необходимо указать в том случае, если вы вводите не реальный, а зашифрованный пароль (что позволяет избежать передачи незашифрованного пароля при отправке на сервер команды CREAT USER). Получить зашифрованное значение из реального пароля вы можете с помощью функции PASSWORD (' ');

Пример: CREAT USER 'anna' IDENTIFIED BY 'annapassword'; GRANT SELECT ON *.* TO 'anna'; GRANT INSERT ON SalesDept.* TO 'anna' WITH GRANT OPTION; GRANT DELETE ON SalesDept.Customers TO 'anna';

Резервное копирование Резервное копирование баз данных необходимо, чтобы в случае сбоев операции системы, файловой системы или разрушения физических носителей информации вы могли восстановить данные из резервной копии и с минимальными потерями продолжить работу. В MySQL предусматривается множество способов резервного копирования данных, так что вы можете выбрать наиболее подходящий для вас. Рекомендуется использовать стратегию резервного копирования, которая сочетает два взаимодополняющих метода: 1. периодическое полное резервное копирование базы данных; 2. ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.

Слишком частое полное резервирование неэффективно, поскольку занимает много времени, а значительная часть данных в базе не успевает измениться. Поэтому наряду с полным резервированием используется промежуточное, которое заключается в копировании двоичных журналов на резервный носитель. Таким образом, даже в случае полного разрушения диска, на котором располагается база данных, вы сможете восстановить не только информацию, сохраненную при полном копировании, но и последующие изменения вплоть до момента последнего промежуточного копирования. В зависимости от назначения и интенсивности эксплуатации вашей базы данных вы можете подобрать оптимальную частоту полного и промежуточного резервирования. Например, полное резервное копирование может выполняться еженедельно, промежуточное ежедневно.

Двоичные журналы Файл двоичного журнала накапливает историю изменений в базе данных за некоторый промежуток времени и позволяет в случае необходимости воспроизвести изменения. Чтобы включить ведение двоичных журналов, запустим сервер MYSQL с параметром --log-bin. Это можно сделать одним из следующих способов. Если вы запускаете сервер вручную из командной строки, укажите параметр --log-bin в команде запуска сервера: mysqld-nt --log-bin

Если сервер MySQL сконфигурирован как сервис Windows и запускается автоматически, или с помощью панели управления, или с помощью MySQL Administrator, откройте конфигурационный файл my.ini, находящийся в папке, где установлена программа MySQL, и добавьте параметр --log-bin в раздел [mysgld]. Сохраните файл. Ведение журналов начнется после перезапуска сервера. В процессе работы сервера в папке data корневой папки MySQL создаваться двоичные журналы - файлы с именами вида -bin.xxxxxx, где хххххх порядковый номер журнала.

Очередной файл журнала создается в следующих случаях: 1. при достижении предельного размера предыдущего файла; 2. при запуске (перезапуске) сервера; 3. при принудительном «сбросе» журналов. «Сброс» журналов необходим при выполнении полного резервного копирования, чтобы изменения с момента резервирования отражались в новом файле (старые файлы журналов при этом становятся не нужны). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием сервер начнет протоколировать изменения в новом файле, а предыдущие файлы вы скопируете на резервный носитель.