Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы к ГОСу -общий текст.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
428.47 Кб
Скачать

25. Язык sql. Общая характеристика sql. Стандарты sql. Классификация. Реализации sql в современных субд. Sql-серверы. Возможности работы в гетерогенной среде.

Разработан в середине 1970-х годов. В качестве основного языка используется в таких СУБД, как Oracle, MS SQL-Server, PostgreSQL, MiniSQL, MySQL и др. В СУБД семейства dBase, Access и других он применяется в качестве альтернативного.

SQL (Structured Query Language - структурированный язык запросов) ориентирован на операции с данными, представленными в виде логически взаимосвязанных совокупностей таблиц. Особенность предложений этого языка состоит в том, что они ориентированы в большей степени на конечный результат обработки данных, чем на процедуру этой обработки. SQL сам определяет, где находятся данные, какие индексы и даже наиболее эффективные последовательности операций следует использовать для их получения: не надо указывать эти детали в запросе к базе данных.

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

SQL включает в себя два языка:

  • Язык определения схемы(SQL-DDL) – позволяет описывать и создавать такие объекты базы данных, как таблицы, индексы, представления и др.

  • Язык манипулирования данными(SQL-DML) – дает возможность задавать поисковые и корректирующие запросы к базе данных.

  • Язык определения доступа к данным (Data Control Language, DCL)

Стандарты SQL

1986 - SQL-86, SQL-87 - Впервые опубликован ANSI. Ратифицирован ISO в 1987.

1989 - SQL-89 - Небольшие изменения.

1992 - SQL-92, SQL-2 - Существенные изменения.

1999 - SQL:1999, SQL-3 - Добавлены регулярные выражения, рекурсивные запросы, триггеры и некоторые обьекто-ориентированные нововведения.

2003 - SQL:2003 - Объявлены XML-зависимые нововведения.

Несмотря на наличие диалектов и различий в синтаксисе, в большинстве своём тексты SQL-запросов, содержащие DDL и DML, могут быть достаточно легко перенесены из одной СУБД в другую. SQL позволяет работать в гетерогенной среде, т.е. возможна обработка запросов с данными, принадлежащими не только разным версиям серверов SQL, но и находящихся на серверах разных производетелей. Существуют системы, разработчики которых изначально закладывались на применение по меньшей мере нескольких СУБД (например: система электронного документооборота Documentum может работать как с Oracle Database, так и с Microsoft SQL Server и IBM DB2.

Наличие стандартов и набора тестов для выявления совместимости и соответствия конкретной реализации SQL общепринятому стандарту только способствует «стабилизации» языка.

Несмотря на наличие международного стандарта ANSI SQL-92, многие компании, занимающиеся разработкой СУБД (например, Oracle, Sybase, Microsoft, MySQL AB, Borland), вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким образом появляются специфичные для каждой конкретной СУБД диалекты языка SQL.

26. SQL-DDL– описание базы данных. Задание ограничений целостности при описании баз данных. Ограничения целостности в стандартах SQL. Обеспечение безопасности при работе с БД.

SQL (Structured Query Language - структурированный язык запросов) ориентирован на операции с данными, представленными в виде логически взаимосвязанных совокупностей таблиц. Особенность предложений этого языка состоит в том, что они ориентированы в большей степени на конечный результат обработки данных, чем на процедуру этой обработки; подобные языки называют декларативными.

Этот язык состоит из двух основных подмножеств:

  • SQL-DDL (Data Definition Language) – предназначен для создания модели данных (таблиц, ключей, ограничений целостности и т.д.)

  • SQL-DML (Data Manipulation Language) – предназначен для работы с данными, для извлечения данных из таблицы или корректировки значений в БД

  • иногда также выделяют SQL- DCL (Data Control Language), предназначенный для управления доступом к данным

Data Definition Language (DDL) (язык описания данных) - это подмножество SQL используемое для описания структуры баз данных.

Функции языков DDL определяются первым словом в предложении (часто называемом запросом), которое почти всегда является глаголом. В случае с SQL эти глаголы - "create" ("создать"), "alter" ("изменить"), "drop" ("удалить"), указывающие действия с таблицами (не с записями!).

Целостность — актуальность и непротиворечивость информации, ее защищенность от разрушения и несанкционированного изменения. Ограничения целостнос­ти представляют собой утверждения о допустимых значениях отдель­ных информационных единиц и связях между ними. Эти ограничения определяются в большинстве случаев особенностями предметной области, хотя могут отражать и чисто информационные (лингвисти­ческие) характеристики. При выполнении операций над БД проверяется выполнение огра­ничений целостности. Действия, приводящие к нарушению подоб­ных ограничений, отвергаются. Ограничения целостности могут относиться к разным информа­ционным объектам: атрибутам (полям), кортежам (строкам, записям), отношениям (таблицам, файлам), связям между файлами и т.п.

Виды ограничений целостности поля:

  • Тип и формат поля.

  • Задание диапазона значений. Обычно используется для чис­ловых полей.

  • Признак непустого поля.

  • Задание домена. Поле может принимать значение из задан­ного множества. Множество возможных значений какого-либо атри­бута называется доменом.

  • Признак уникальности. Это ограничение проверяет допустимость значения данного поля, но при этом просматривается вся таблица (файл). Признак уникальности поля тесно связан с понятием ключа.

Ограничение целостности кортежа (запись, строка) - ограничения на соотношения значений отдельных полей в пределах одной строки. В качестве ограничения на соотношения полей внутри одного корте­жа можно привести следующее: значение поля «Стаж» не должно пре­вышать [«Возраст» - 16] (предполагается, что трудовой стаж челове­ка начинается не ранее чем в 16 лет).

Ограничения целостности совокупности таблиц. Ограничения целостности связи: значение ат­рибута, отражающего связь между объектами и являющегося внешним ключом отношения, обязательно должно совпадать с одним из значе­ний атрибута, являющегося ключом отношения, описывающего соот­ветствующий объект. Разновидностью ограничения целостности связи является ограничение по существованию, заключающееся в том, что для суще­ствования объекта в отношении S1 необходимо, чтобы он был связан с объектом в отношении S2. Проблема обеспечения целостности по связи (и по существова­нию) по-разному выглядит при вставке новой записи в связанную таб­лицу, при корректировке записей, при удалении связанных записей.

Декларативное задание ограничений целостности в SQL. В SQL большая часть ограничений целостности задается при описании таблицы. Возмож­ность декларативного задания ограничений целостности является одним из существенных отличий стандарта SQL-89 и последующих от стандарта SQL-86. При описании баз данных с помощью SQL-DDL может быть задан ряд ограничений:

Спецификация уникальности:

  • Определение первичного ключа. Указывается PRIMARY KEY, всего один для таблицы.

  • Задание признака уникальности поля или совокупности полей. Указывается UNIQUE для прочих полей.

Ограничение на столбец:

  • Ограничение на неопределенное значение (атрибут должен быть заполнен – NOT NULL).

  • Проверочные ограничения на строки таблицы. Задается выражение, которое должно принимать значение «истина» для всех строк таблицы.

Определение ограничений целостности связей, задание значений по умолчанию для атрибутов. Для определения ограничения ссылок (referential constraint definition) используются ограничения FOREIGN KEY и REFERENCES. После ключевых слов FOREIGN KEY в круглых скоб­ках указывается список имен описываемой таблицы (ссылающейся таблицы, порожденной таблицы). После ключевого слова REFERENCES указывается имя таблицы, которая содержит родитель­ский ключ, и далее в круглых скобках - список столбцов, составляю­щих этот первичный ключ. В принципе ссылающаяся таблица может быть той же самой таблицей, что и целевая таблица.

Стандарт SQL-92 позволяет определять отложенные и неотложные ограничения целостности. Первые проверяются после выполнения транзакции, перед её записью. Неотложные ограничения выполняются при выполнении каждого SQL-оператора.

Для обеспечения безопасности хранения данных и контроля прав доступа к ним в СУБД MySQL существует специальная база данных mysql, в которой имеется пять таблиц: user, host, db, tables_priv и columns_priv. Таблица user предназначена для определения, может ли пользователь подключаться к серверу MySQL и обладает ли он привилегиями администратора. В ней хранится имя хоста, с которого можно подключаться, имя пользователя и пароль, а также какие привилегии он имеет. Таблица db определяет, какие пользователи к каким таблицам и с каких хостов могут получить доступ. Таблица host дополняет таблицу db. Если пользователь должен подключаться к базе данных с нескольких хостов, то в таблице db для него не будет указано ни одного хоста - все они будут перечислены в таблице host. Таблицы tables_priv и columns_priv предназначены для хранения привилегий на уровне таблиц и уровне столбцов. Они работают подобно таблице db, но обеспечивают привилегии для таблиц в конкретной базе данных и столбцов в конкретной таблице. Основных привилегий 10, дающих право на выполнение операций select, insert, update, delete, create, drop, grant, references, index и alter. В таблице user их на 4 больше: reload, shutdown, process и file, которые нужны для администрирования СУБД.

Для установки прав доступа применяется команда grant:

Grant select, insert, delete, update on user.* to user@host identified by 'password';

27. SQL-DML – манипулирование данными. Ввод и корректировка данных средствами SQL.

Язык SQL (Structured Query Language) был разработан в 70х гг. и на сегодняшний день является основным инструментом для работы с реляционными базами данных. Этот язык состоит из двух основных подмножеств:

  • SQL-DDL (Data Definition Language) – предназначен для создания модели данных (таблиц, ключей, ограничений целостности и т.д.)

  • SQL-DML (Data Manipulation Language) – предназначен для работы с данными, для извлечения данных из таблицы или корректировки значений в БД

  • иногда также выделяют SQL- DCL (Data Control Language), предназначенный для управления доступом к данным.

SQL-DML позволяет пользователю производить следующие операции с БД: выбор записей из таблиц – команда SELECT; добавление записей в таблиц – команда INSERT; корректировка значений – команда UPDATE; удаление записей из таблиц – команда DELETE.

Как правило, команда извлечения данных SELECT рассматривается отдельно от команд модификации данных и иногда даже неформально выносится за рамки блока DML.

Итак, для ввода и корректировки данных средствами SQL служат следующие команды.

INSERT – добавление строки в таблицу.

INSERT INTO Таблица [(Столбцы)]

{VALUES (Столбцы)} | <выражение запроса> | {DEFAULT VALUES};

Команда INSERT добавляет строку в таблицу Таблица с указанными значениями.

Существует три способа указать значения для записи:

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

  • значения по умолчанию – с использованием оператора DEFAULT VALUES (также значение DEFAULT можно среди прочих включать в список значений при использовании оператора VALUES)

  • в виде результатов подзапроса – этот вариант является наиболее предпочтительным, поскольку позволяет вставлять несколько строк сразу и избегать ручного ввода; необходимо помнить, что порядок столбцов в результирующей таблице подзапроса подчиняется тем же правилам, что и при использовании оператора VALUES

UPDATE – изменение значений отдельных полей.

UPDATE Таблица

SET {Столбцы = {новое значение столбца}}

[{WHERE <предикат>}];

Команда UPDATE позволяет изменить уже имеющиеся в таблице Таблица данные. С помощью одной команды можно изменить любое количество столбцов, однако каждый столбец может быть упомянут всего лишь один раз. Предикат WHERE указывает, какие строки подлежат изменению; если он отстутствует, будут обновлены все строки таблицы. Для ввода или вычисления значения столбца существуют следующие возможности:

  • прямое указание значений – тип указываемого значения должен совпадать с типом соответствующего столбца, допускаются также значения NULL и DEFAULT

  • расчет по формуле – в формулу могут входить числовые константы, математические операторы, имена полей, условные выражения CASE (вида CASE WHEN <предикат> THEN x ELSE y)

  • результат подзапроса – указанный подзапрос обязательно должен возвращать единственное значение, соответствующее типу столбца

DELETE – удаление строк из таблицы.

DELETE FROM Таблица [WHERE <предикат>];

Команда DELETE удаляет строки из таблицы Таблица. Если предикат WHERE указан, то удаляются только те строки, которые удовлетворяют условию; если предикат не указан, удаляются все строки.

В стандарт SQL:2003 включена также команда MERGE, представляющая собой комбинацию команд INSERT и UPDATE. Она в зависимости от указанного условия либо добавляет строки в таблицу, либо обновляет существующие. Пример:

MERGE DestTable as dst – Данные будут сохранены в этой таблице

USING

(    --Таблица с которой сравниваем. Формируем ее как результат выполнения запроса

    SELECT PersonName, Qty FROM SourceTable

) AS src (PersonName, Qty)

ON (dst.PersonName=src.PersonName) –Критерий совпадений

WHEN MATCHED --Совпали

    THEN UPDATE SET dst.Qty = src.Qty - dst.Qty

WHEN TARGET NOT MATCHED –Не совпали (во второй таблице есть запись, которой нет в первой)

    THEN INSERT VALUES (src.PersonName, src.Qty);