Автор работы: Пользователь скрыл имя, 03 Октября 2011 в 13:16, курсовая работа
Одним из основных преимуществ реляционного подхода к организации баз данных (БД) является то, что пользователи реляционных БД получают возможность эффективной работы в терминах простых и наглядных понятий таблиц, их строк и столбцов без потребности знания реальной организации данных во внешней памяти.
Введение……………………………………………………………………………..4
1. SQL………………………………………………………………………………...6
1.1 Таблицы SQL……………………………………………………………….…7
1.2 Структура языка SQL……………………………………………………..…8
1.3 Структура запросов SQL………………………………………………….....9
1.4 Операторы модификации данных…………………………………...…....17
1.5 Транзакции в SQL……………………………………………………….….24
1.6 Защита данных………………………………………………………….…...25
1.7 Обработка ошибок…………………………………………………………..27
Заключение……………………………………………………………...…………29
Список использованной литературы…………………………………………..30
Приложение А……………………………………………………………………..31
Пример. Пусть требуется указать "No PC" (нет ПК) в столбце type для тех моделей ПК из таблицы Product, для которых нет соответствующих строк в таблице PC. Решение посредством соединения таблиц можно записать так:
UPDATE Product
SET type='No PC'
FROM Product pr LEFT JOIN PC ON pr.model=pc.model
WHERE type='pc' AND pc.model IS NULL
Здесь используется внешнее соединение, в результате чего столбец pc.model для моделей ПК, отсутствующих в таблице PC, будет содержать NULL-значение, что и используется для идентификации подлежащих обновлению строк. Естественно, эта задача имеет решение и в "стандартном" исполнении:
UPDATE Product
SET type='No PC'
WHERE type='pc' and model NOT IN (SELECT model FROM PC)
3) Оператор DELETE
Оператор DELETE удаляет строки из временных или постоянных базовых таблиц, представлений или курсоров, причем в двух последних случаях действие оператора распространяется на те базовые таблицы, из которых извлекались данные в эти представления или курсоры. Оператор удаления имеет простой синтаксис:
DELETE FROM [WHERE ];
Если предложение WHERE отсутствует, удаляются все строки из таблицы или представления (представление должно быть обновляемым). Более быстро эту операцию (удаление всех строк из таблицы) в Transact-SQL можно также выполнить с помощью команды
TRUNCATE TABLE
Однако есть ряд отличий в реализации команды TRUNCATE TABLE по сравнению с использованием оператора DELETE, которые следует иметь в виду:
1. Не журнализируется удаление отдельных строк таблицы. В журнал записывается только освобождение страниц, которые были заняты данными таблицы.
2.
Не отрабатывают триггеры. Как
следствие, эта команда
3. Значение счетчика (IDENTITY) сбрасывается в начальное значение.
Пример. Требуется удалить из таблицы Laptop все ПК-блокноты с размером экрана менее 12 дюймов.
DELETE FROM Laptop
WHERE screen
Все блокноты можно удалить с помощью оператора
DELETE FROM Laptop
Или
TRUNCATE TABLE Laptop
Transact-SQL
расширяет синтаксис оператора
DELETE, вводя дополнительное
4) FROM.
При помощи источника табличного типа можно конкретизировать данные, удаляемые из таблицы в первом предложении FROM.
При помощи этого предложения можно выполнять соединения таблиц, что логически заменяет использование подзапросов в предложении WHERE для идентификации удаляемых строк.
Поясним сказанное на примере. Пусть требуется удалить те модели ПК из таблицы Product, для которых нет соответствующих строк в таблице PC.
Используя стандартный синтаксис, эту задачу можно решить следующим запросом:
DELETE FROM Product
WHERE type='pc' AND model NOT IN (SELECT model FROM PC)
Заметим, что предикат type='pc' необходим здесь, чтобы не были удалены также модели принтеров и ПК-блокнотов.
Эту же задачу можно решить с помощью дополнительного предложения FROM следующим образом:
DELETE FROM Product
FROM Product pr LEFT JOIN PC ON pr.model=pc.model
WHERE type='pc' AND pc.model IS NULL
Здесь используется внешнее соединение, в результате чего столбец pc.model для моделей ПК, отсутствующих в таблице PC, будет содержать NULL-значение, что и используется для идентификации подлежащих удалению строк.
Под SQL-транзакцией (иногда называемой просто транзакцией) понимается последовательность выполнения операторов SQL, являющаяся атомарной по отношению к восстановлению. Эти операции выполняются одной или более единицами компиляции и модулями или путем прямого вызова SQL. От реализации зависит, могут ли в одной транзакции выполняться динамические и/или статические операторы выборки и манипулирования данными и динамические и/или статические операторы определения и манипулирования схемой.
Каждый модуль или прямой вызов SQL, инициирующие выполнение оператора, ассоциируются с транзакцией. SQL-транзакция начинается при выполнении процедуры из некоторого модуля или прямого вызова оператора SQL вне активной транзакции. Транзакция завершается при выполнении операторов COMMIT или ROLLBACK. Если SQL-транзакция завершается успешным выполнением оператора COMMIT, то все изменения, произведенные ею над данными и/или схемой становятся постоянно хранимыми и доступными всем параллельно выполняющимся или образуемым впоследствии транзакциям. Если транзакция завершается оператором ROLLBACK или если выполнение оператора COMMIT оказывается неуспешным, то все изменения, произведенные транзакцией над данными и/или схемой, ликвидируются.
У каждой SQL-транзакции имеется режим доступа - "только чтение" или "чтение и запись". Режим доступа может быть явно установлен оператором SETTRANSACTION; по умолчанию он устанавливается в "чтение-запись". Термин "только чтение" применяется только к постоянно хранимым базовым и представляемым таблицам.
К операторам защиты данных относят операторы авторизации и привилегий. Синтаксис команд GRANT и REVOKE
GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...]
ON {tbl_name | * | *.* | db_name.*}
TO user_name [IDENTIFIED BY [PASSWORD] 'password']
[, user_name [IDENTIFIED BY 'password'] ...]
[REQUIRE
[{SSL| X509}]
[CIPHER cipher [AND]]
[ISSUER issuer [AND]]
[SUBJECT subject]]
[WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR # |
MAX_UPDATES_PER_HOUR # |
MAX_CONNECTIONS_PER_HOUR #]]
REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...]
ON {tbl_name | * | *.* | db_name.*}
FROM user_name [, user_name ...]
Команды
GRANT и REVOKE позволяют системным
Глобальные привилегии применяются ко всем базам данных на указанном сервере. Эти привилегии хранятся в таблице mysql.user.
Привилегии базы данных применяются ко всем таблицам указанной базы данных. Эти привилегии хранятся в таблицах mysql.db и mysql.host.
Привилегии таблицы применяются ко всем столбцам указанной таблицы. Эти привилегии хранятся в таблице mysql.tables_priv.
Привилегии
столбца применяются к
Ниже приведен список возможных значений параметра priv_type для операторов GRANT и REVOKE:
ALL [PRIVILEGES] - Задает все простые привилегии, кроме WITH GRANT OPTION
ALTER - Разрешает использование ALTER TABLE
CREATE - Разрешает использование CREATE TABLE
CREATE TEMPORARY TABLES - Разрешает использование CREATE TEMPORARY TABLE
DELETE - Разрешает использование DELETE
DROP - Разрешает использование DROP TABLE.
EXECUTE
- Разрешает пользователю
FILE - Разрешает использование SELECT ... INTO OUTFILE и LOAD DATA INFILE
INDEX - Разрешает использование CREATE INDEX and DROP INDEX
LOCK TABLES - Разрешает использование LOCK TABLES на таблицах, для которых есть привилегия SELECT.
PROCESS - Разрешает использование SHOW FULL PROCESSLIST
REFERENCES - Зарезервировано для использования в будущем
RELOAD - Разрешает использование FLUSH
REPLICATION CLIENT - Предоставляет пользователю право запрашивать местонахождение головного и подчиненных серверов
REPLICATION SLAVE - Необходимо для подчиненных серверов при репликации (для чтения информации из бинарных журналов головного сервера).
SELECT - Разрешает использование SELECT
SHOW DATABASES - SHOW DATABASES выводит все базы данных.
SHUTDOWN - Разрешает использование mysqladmin shutdown
SUPER - Позволяет установить одно соединение (один раз), даже если достигнуто значение max_connections, и запускать команды CHANGE MASTER, KILL thread, mysqladmin debug, PURGE MASTER LOGS и SET GLOBAL
UPDATE - Разрешает использование UPDATE
USAGE - Синоним ``без привилегий'' - можно задавать, если необходимо создать пользователя без привилегий.
При
выполнении программных объектов пользователь
должен иметь возможность оперативно
реагировать на возникающие отклонения
от нормального процесса их выполнения.
Для решения этой задачи разработчики
SQL применили механизм обработки исключительных
ситуаций. Данный механизм представляет
собой прием, обеспечивающий перехват
и обработку ошибок и предупреждений.
Исключительные ситуации в SQL возникают
при выполнении SQL-операторов. Исключительные
ситуации представляются в виде кодов
возврата, которые формируются после завершения
выполнения операторов. Коды возврата
одновременно записываются в системные
переменные SQLSTATE и SQLCODE. В этих переменных
возникновение исключительных ситуаций
кодируются по разному. Так в переменной
SQLCODE они представляются в виде десятичных
чисел. При этом отрицательные значения
соответствуют ошибкам, положительные
- предупреждениям, а ноль - успешному завершению
оператора. Кодирование исключительных
ситуаций в переменной SQLSTATE соответствует
стандарту SQL/92. При этом коды возврата
представляются в виде строк из пяти символов.
В переменной SQLSTATE первые два символа
составляют код класса ошибок, следующие
три символа - код внутри класса. Код "00000"
соответствует успешному выполнению оператора.
В зависимости от значений кодов возврата
может быть принято решение о повторении
оператора, прерывания функционирования
приложения и т.д.
ПРИМЕЧАНИЕ. После считывания значения одной из переменных SQLSTATE или SQLCODE, обе они приводятся в состояние отсутствия ошибок.
При написании данной работы мы рассмотрели структуру языка SQL, а так же одну большинство из групп операторов SQL. При рассмотрении были, по возможности, приведены примеры для базы данных, описанной в приложении А. Показаны: область применения и основные функции языка.
В настоящее время язык SQL является стандартом для использования в реляционных базах данных, наиболее современных хранилищах информации. Перспективы их развития БД огромны, но прослеживается четкая тенденция во всех новых СУБД - обязательная поддержка языка SQL.