язык структурированных запросов php

Язык структурированных запросов php

Логичнее всего устанавливать сервер на компьютере, входящем в какую-либо сеть, локальную или глобальную. Однако можно устанавливать сервер и на отдельно стоящий компьютер (тогда он будет являться одновременно и клиентом и сервером ).

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

На рис. 4.1 и в таблице 4.1 приведена статистика использования различных серверов среди всех доменов Internet от NetCraft http://news.netcraft.com/.

язык структурированных запросов php. Смотреть фото язык структурированных запросов php. Смотреть картинку язык структурированных запросов php. Картинка про язык структурированных запросов php. Фото язык структурированных запросов php

Таблица 4.1. Ведущие разработчики web-серверов

РазработчикФевраль 2004ПроцентыМарт 2004ПроцентыИзменение
Apache3170388467.213228058267.20-0.01
Microsoft984997120.881009976021.020.14
SunONE16572953.5116515753.44-0.07
Zeus7552271.607627161.59-0.01

Протокол HTTP и способы передачи данных на сервер

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

Сообщения по сети при использовании протокола HTTP передаются в формате, схожем с форматом почтового сообщения Internet (RFC-822) или с форматом сообщений MIME ( Multipurpose Internet Mail Exchange).

Ответ сервера содержит:

Форма запроса клиента

Простой запрос содержит метод доступа и адрес ресурса. Формально это можно записать так:

Пример простого запроса :

Полный запрос содержит строку состояния, несколько заголовков (заголовок запроса, общий заголовок или заголовок содержания) и, возможно, тело запроса. Формально общий вид полного запроса можно записать так:

В данном случае используется метод POST и протокол HTTP версии 1.0.

Полная форма содержит тип протокола доступа, адрес сервера ресурса и адрес ресурса на сервере (рисунок 4.2).

язык структурированных запросов php. Смотреть фото язык структурированных запросов php. Смотреть картинку язык структурированных запросов php. Картинка про язык структурированных запросов php. Фото язык структурированных запросов php

Методы

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

Использование HTML-форм для передачи данных на сервер

После обработки браузером этот файл будет выглядеть примерно так:

язык структурированных запросов php. Смотреть фото язык структурированных запросов php. Смотреть картинку язык структурированных запросов php. Картинка про язык структурированных запросов php. Фото язык структурированных запросов php

Для метода GET

В принципе создавать HTML-форму для передачи данных методом GET не обязательно. Можно просто добавить в строку URL нужные переменные и их значения.

Несмотря на все эти недостатки, использовать метод GET достаточно удобно при отладке скриптов (тогда можно видеть значения и имена передаваемых переменных) и для передачи параметров, не влияющих на безопасность.

Для метода POST

Обработка запросов с помощью PHP

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

Тогда, если в форму мы ввели имя «Вася», фамилию «Петров» и выбрали среди всех курсов курс по PHP, на экране браузера получим такое сообщение:

Тогда на экране браузера, если мы ввели имя «Вася», фамилию «Петров» и выбрали среди всех курсов курс по PHP, увидим сообщение, как в предыдущем примере:

Теперь самое время решить задачу, сформулированную в начале лекции.

Пример обработки запроса с помощью PHP

Напомним, в чем состояла задача, и уточним ее формулировку. Нужно написать форму для регистрации участников заочной школы программирования и после регистрации отправить участнику сообщение. Мы назвали это сообщение универсальным письмом, но оно будет немного отличаться от того письма, которое мы составили на предыдущей лекции. Здесь мы также не будем отправлять что-либо по электронной почте, дабы не уподобляться спамерам, а просто сгенерируем это сообщение и выведем его на экран браузера. Начальный вариант формы регистрации мы уже приводили выше. Изменим его таким образом, чтобы каждый регистрирующийся мог выбрать сколько угодно курсов для посещения, и не будем подтверждать получение регистрационной формы.

Заключение

Источник

Язык структурированных запросов php

СУБД MySQL поддерживает подготавливаемые запросы. Подготавливаемые (или параметризованные) запросы используются для повышения эффективности, когда один запрос выполняется многократно и защищает от SQL-инъекций.

Выполнение подготавливаемого запроса проводится в два этапа: подготовка и исполнение. На этапе подготовки на сервер посылается шаблон запроса. Сервер выполняет синтаксическую проверку этого шаблона, строит план выполнения запроса и выделяет под него ресурсы.

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

Пример #1 Подготовленный запрос

Повторное выполнение запроса

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

Пример #2 Выражение INSERT один раз подготавливается, а затем многократно выполняется

Результат выполнения данного примера:

Каждый подготавливаемый запрос использует ресурсы сервера. Если запрос больше не нужен, его необходимо сразу закрыть. Если не сделать этого явно, запрос закроется сам, но только когда PHP освободит его дескриптор, как правило это происходит при выходе запроса из области видимости или при завершении работы скрипта.

Использование подготавливаемых запросов не всегда приводит к повышению эффективности. Если параметризованный запрос запускается лишь раз, это приводит к большему количеству клиент-серверных обменов данными, нежели при выполнении простого запроса. Именно по этой причине в примере выше выражение SELECT выполнялось, как обычный запрос.

Также имеет смысл рассмотреть SQL-синтаксис вставки множества значений в выражении INSERT. В примере выше мультивставка (значения для вставки перечисляются через запятую) в предложении INSERT обошлась бы дешевле, чем подготовленный запрос.

Пример #3 Меньше обменов данными при использовании мультивставок SQL

Типы данных значений в результирующей таблице

В протоколе клиент-серверного взаимодействия MySQL для обычных и подготавливаемых запросов определены разные протоколы передачи данных клиенту. Параметризованные запросы используют так называемый двоичный протокол. Сервер MySQL посылает результирующий набор клиенту «как есть» в двоичном формате. Данные в таблице не преобразуются в текст. Клиентские библиотеки получают двоичные данные и пытаются преобразовать значения в соответствующие типы данных PHP. Например, столбец результатов запроса типа SQL INT PHP примет и преобразует в тип integer.

Пример #4 Исходные типы данных

Результат выполнения данного примера:

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

Получение результатов запроса с привязкой переменных

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

Пример #5 Привязка переменных к результату запроса

Результат выполнения данного примера:

Объекты подготавливаемых запросов по умолчанию возвращают небуферизованные результирующие наборы. Эти таблицы никаким неявным образом не переносятся на клиента, они остаются на сервере, занимая его ресурсы, пока клиентский процесс самостоятельно не извлечёт все данные. Если клиент не может извлечь данные результирующего набора, или после закрытия объекта запроса остаются невыбранными какие-то данные, то на mysqli ложится ответственность неявно подчистить этот мусор за клиентским процессом.

Извлечение результатов запроса посредством mysqli_result интерфейса

Вместо использования привязки переменных к результатам запроса, результирующие таблицы можно извлекать средствами интерфейса mysqli_result. Функция mysqli_stmt::get_result() возвращает буферизованный результирующий набор строк.

Пример #6 Использование mysqli_result для выборки результатов запроса

Результат выполнения данного примера:

Использование интерфейса mysqli_result имеет дополнительное преимущество в том, что буферизация результирующих таблиц на клиенте предлагает гибкую систему навигации по этим таблицам.

Пример #7 Буферизация результирующего набора для удобства чтения данных

Результат выполнения данного примера:

Экранирование и SQL-инъекции

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

Эмуляция подготовленного запроса на клиенте

В API нет возможности эмулировать подготавливаемые запросы на клиенте.

Быстрое сравнение подготовленных и неподготовленных запросов

В таблице ниже приведено сравнение обычного и подготовленного на сервере запросов.

Источник

Язык программирования PHP

Автор: Пользователь скрыл имя, 15 Февраля 2013 в 15:20, реферат

Краткое описание

Internet – всемирная сеть, которая объединяет множество компьютерных сетей различного уровня и отдельных компьютеров, обменивающих друг с другом информацией по каналам общественных телекоммуникаций на базе протоколов связи TCP/IP. Информация в Интернет хранится на серверах (сайтах). Серверы, объединенные высокоскоростными магистралями, составляют базовую часть сети Интернет. Доступ пользователей к информационным ресурсам Internet обычно осуществляется через провайдеров или корпоративную сеть.

Оглавление

Введение…………………………………………………………………………. 2
Язык программирования PHP
Основные понятия PHP……………………………………………..3
Основные отличия PHP от других языков, используемых
для web-разработки………………………………………………………. 3
Основные преимущества языка PHP……………………………….3
Язык запросов SQL
Основные понятия SQL…………………………………………….6
Возможности SQL…………………………………………………. 6
База данных MySQL
Основные понятия MySQL………………………………………….8
Использование MySQL……………………………………………. 8
Возможности MySQL……………………………………………….9
Заключение……………………………………………………………………….10
Список использованных источников………………………………………..….11

Файлы: 1 файл

Реферат по информатике.docx

Список использованных источников………………………………………..…. 11

Internet – всемирная сеть, которая объединяет множество компьютерных сетей различного уровня и отдельных компьютеров, обменивающих друг с другом информацией по каналам общественных телекоммуникаций на базе протоколов связи TCP/ IP. Информация в Интернет хранится на серверах (сайтах). Серверы, объединенные высокоскоростными магистралями, составляют базовую часть сети Интернет. Доступ пользователей к информационным ресурсам Internet обычно осуществляется через провайдеров или корпоративную сеть.

В сети Интернет существует несколько сервисов или служб (E-mail, USENET, TELNET, WWW, FTP и др.), но наиболее популярной службой является WWW. Услуги WWW построены по принципу клиент-сервер. Служба состоит из серверов, доступ к серверам осуществляется клиентскими приложениями или браузерами. Основной объем информационных ресурсов в виде веб-страниц или файлов в формате html находится на веб-сайтах, размещенных на Web-серверах (на хостингах) сети Интернет.

Сайт является набором веб-страниц, объединенных общей тематикой и связанных между собой гиперссылками, единой системой навигации. Прикладным протоколом для передачи гипертекста (веб-страниц) является http (https), который указывается в URL или адресе любого ресурса (документа, файла) в Internet.

PHP – это широко используемый язык сценариев общего назначения с открытым исходным кодом. PHP это язык программирования, специально разработанный для написания web-приложений (сценариев), исполняющихся на Web-сервере. PHP позволяет создавать качественные Web-приложения за очень короткие сроки, получая продукты, легко модифицируемые и поддерживаемые в будущем. PHP прост для освоения, и вместе с тем способен удовлетворить запросы профессиональных программистов [1].

Аббревиатура PHP означает «Hypertext Preprocessor (Препроцессор Гипертекста)». Первоначально аббревиатура PHP означала «Personal Home Pages».

PHP доступен для большинства операционных систем, включая Linux, многие модификации Unix (такие, как HP-UX, Solaris и OpenBSD), Microsoft Windows, Mac OS X, RISC OS, и многих других. Также в PHP включена поддержка большинства современных вебсерверов, таких, как Apache, Microsoft Internet Information Server, Personal Web Server, серверов Netscape и iPlanet, сервера Oreilly Website Pro, Caudium, Xitami, OmniHTTPd и многих других. Для большинства серверов PHP поставляется в качестве модуля, для других, поддерживающих стандарт CGI, PHP может функционировать в качестве процессора CGI [3].

Синтаксис языка берет начало из C, Java и Perl. Важным преимуществом языка PHP перед такими языками, как языков Perl и C заключается в возможности создания HTML документов с внедренными командами PHP. Подробнее об этой возможность смотрите здесь.

Значительным отличием PHP от какого-либо кода, выполняющегося на стороне клиента, например, JavaScript, является то, что PHP-скрипты выполняются на стороне сервера. Язык PHP допускает возможность сконфигурировать свой сервер таким образом, чтобы HTML-файлы обрабатывались процессором PHP, таким образом клиенты даже не смогут узнать, получают ли они обычный HTML-файл или результат выполнения скрипта PHP [1].

Практический характер РНР обусловлен пятью важными характеристиками:

Существует еще одна «характеристика», которая делает РНР особенно привлекательным: он распространяется бесплатно, с открытыми исходными кодами (Open Source) [2]. На PHP написано огромное количество сценариев различной сложности и ориентации, которые в основном, также распространяются бесплатно. Языку PHP посвящены огромное число Интернет-ресурсов, на нем написаны большинство систем управления контентом (CMS), форумы (таких, например, как phpbb), системы опросов, рассылки, и.т.п. Профессиональные разработчики все чаще используют PHP для написания сложных систем. И хотя PHP является интерпретируемым языком, он часто используется на веб-узлах с большой нагрузкой (например, www.lycos.com, www.yahoo.com).

Язык PHP постоянно совершенствуется, и ему наверняка обеспечено долгое доминирование в области языков web-программирования, по крайней мере, в ближайшее время.

Как правило, сейчас активно используются версии PHP4 и PHP5.

Версия PHP3 уже практически не используется, поскольку значительно уступает по функциональности и производительности старшим версиям PHP.

Принципиальным отличием PHP5 от PHP4 является новое ядро Zend Engine 2. В PHP5 объектная модель была значительно переработана, добавлено много новых возможностей, благодаря которым PHP5 получил некоторые черты таких объектно-ориентированных языков, как C++ и Java. Производительность встроенных стандартных функций PHP увеличилась на 40% и более [5].

SQL (Structured Query Language, язык структурированных запросов) — это специальный язык, используемый для определения данных, доступа к данным и их обработки [2].

Язык SQL относится к непроцедурным (nonprocedural) языкам — он лишь описывает нужные компоненты (например, таблицы) и желаемые результаты, не указывая, как именно эти результаты должны быть получены.

Каждая реализация SQL является надстройкой над процессором базы данных (database engine), который интерпретирует операторы SQL и определяет порядок обращения к структурам БД для корректного и эффективного формирования желаемого результата.

Стандарт SQL определяется ANSI — American National Standarts Institute (Американским Национальным Институтом Стандартов) и в настоящее время принят ISO — International Standarts Organization (Международной Организацией по Стандартизации) [4].

SQL — непроцедурный язык: серверу базы данных сообщается, что нужно сделать и каким образом. Для обработки запроса сервер базы данных транслирует команды SQL во внутренние процедуры. Благодаря тому, что SQL скрывает детали обработки данных, его легко использовать [3].

Что можно делать с помощью SQL:

— SQL позволяет создавать таблицы данных.

— SQL позволяет хранить данные.

— SQL позволяет получать данные.

— SQL позволяет изменять данные.

— SQL позволяет изменять структуру таблиц.

— SQL позволяет объединять данные.

— SQL позволяет выполнять вычисления.

— SQL позволяет обеспечивать защиту данных.

Команды SQL разделяются на следующие группы:

— Команды языка определения данных — DDL (Data Definition Language). Эти SQL команды можно использовать для создания, изменения и удаления различных объектов базы данных [5].

— Команды языка управления данными — DCL (Data Control Language). С помощью этих SQL команд можно управлять доступом пользователей к базе данных и использовать конкретные данные (таблицы, представления и т.д.).

— Команды языка управления транзакциями — TCL (Тгаnsасtiоn Соntrol Language). Эти SQL команды позволяют определить исход транзакции.

— Команды языка манипулирования данными — DML (Data Manipulation Language). Эти SQL команды позволяют пользователю перемещать данные в базу данных и из нее.

Система управления базами данных.

Система управления реляционными базами данных.

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

MySQL является очень быстрым, надежным и легким в использовании. MySQL обладает также рядом удобных возможностей, разработанных в тесном контакте с пользователями. Первоначально сервер MySQL разрабатывался для управления большими базами данных с целью обеспечить более высокую скорость работы по сравнению с существующими на тот момент аналогами. И вот уже в течение нескольких лет данный сервер успешно используется в условиях промышленной эксплуатации с высокими требованиями. Несмотря на то, что MySQL постоянно совершенствуется, он уже сегодня обеспечивает широкий спектр полезных функций. Благодаря своей доступности, скорости и безопасности MySQL очень хорошо подходит для доступа к базам данных по Internet [3].

Технические возможности СУБД MySQL

ПО MySQL является системой клиент-сервер, которая содержит многопоточный SQL-сервер, обеспечивающий поддержку различных вычислительных машин баз данных, а также несколько различных клиентских программ и библиотек, средства администрирования и широкий спектр программных интерфейсов (API).

Благодаря использованию языка программирования PHP в связке с языком запросов SQL и базами данных MySQL создается возможность создания динамического Web-сайта с большим количеством контента. Все данные хранятся на сервере, а при запросе их пользователем, обрабатываются специальным кодом, и формируются в нужном виде в браузере пользователя.

На подобном сайте в зависимости от запроса пользователя можно генерировать различные страницы сайта. Отсюда следуют все остальные возможности языка:

1) Возможность реализации регистрации и авторизации пользователя на сайте.

Источник

Введение в SQL

Что такое SQL (Structured Query Language)?

SQL (Structured Query Language) — язык структурированных запросов.

SQL (Structured Query Language, язык структурированных запросов) — это специальный язык, используемый для определения данных, доступа к данным и их обработки. Язык SQL относится к непроцедурным (nonprocedural) языкам — он лишь описывает нужные компоненты (например, таблицы) и желаемые результаты, не указывая, как именно эти результаты должны быть получены. Каждая реализация SQL является надстройкой над процессором базы данных (database engine), который интерпретирует операторы SQL и определяет порядок обращения к структурам БД для корректного и эффективного формирования желаемого результата.

Стандарт SQL определяется ANSI — American National Standarts Institute (Американским Национальным Институтом Стандартов) и в настоящее время принят ISO — International Standarts Organization (Международной Организацией по Стандартизации).

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

Что можно делать с помощью SQL?

Команды SQL

Команды SQL разделяются на следующие группы:

Основные ключевые слова, используемые в статье«Введение в SQL»:

Источник

Structured Query Language

Содержание

SQL ( ˈɛsˈkjuˈɛl или ˈsiːkwəl ; англ. Structured Query Language — язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. Вопреки существующим заблуждениям, SQL является информационно-логическим языком, а не языком программирования.

Язык SQL делится на четыре части:

История

В начале 1970-х годов в одной из исследовательских лабораторий компании СУБД IBM System R, для которой затем был создан специальный язык SEQUEL, позволявший относительно просто управлять данными в этой СУБД. Аббревиатура SEQUEL расшифровывалась как англ. Structured English QUEry Language — «структурированный английский язык запросов». Позже по юридическим соображениям [1] язык SEQUEL был переименован в SQL. Когда в 1986 году первый стандарт языка SQL был принят ANSI (American National Standards Institute), официальным произношением стало [,es kju:’ el] — эс-кью-эл. Несмотря на это, даже англоязычные специалисты продолжают читать SQL как сиквел вместо эс-кью-эл (по-русски также часто говорят «эс-ку-эль»).

Целью разработки было создание простого непроцедурного языка, которым мог воспользоваться любой пользователь, даже не имеющий навыков программирования. Собственно разработкой языка запросов занимались Дональд Чэмбэрлин (Donald D. Chamberlin) и Рэй Бойс (Ray Boyce). Пэт Селинджер (Pat Selinger) занималась разработкой стоимостного оптимизатора (англ. cost-based optimizer ), Рэймонд Лори (Raymond Lorie) занимался компилятором запросов.

Стоит отметить, что SEQUEL был не единственным языком подобного назначения. В Калифорнийском Университете Беркли была разработана некоммерческая СУБД PostgreSQL), которая являлась реляционной СУБД, но использовала свой собственный язык QUEL, который, однако, не выдержал конкуренции по количеству поддерживающих его СУБД с языком SQL.

Первыми СУБД, поддерживающими новый язык, стали в 1979 году Oracle V2 для машин Oracle) и System/38 от IBM, основанная на System/R. Вопреки сложившемуся мнению, первой стала именно СУБД Oracle V2.

Первый официальный стандарт языка SQL был принят ANSI в 1986 году и 1987 году (так называемый SQL-86) и несколько уточнён в 1989 году. Дальнейшее развитие языка поставщиками СУБД потребовало принятия в 1992 году нового расширенного стандарта (ANSI SQL-92 или просто SQL2). Следующим стандартом стал SQL:2003) с небольшими модификациями, внесёнными позже. История версий стандарта:

ГодНазваниеИное названиеИзменения
1986SQL-86SQL-87Первый вариант стандарта, принятый институтом ANSI и одобренный ISO в 1987 году.
1989SQL-89FIPS 127-1Немного доработанный вариант предыдущего стандарта.
1992SQL-92SQL2, FIPS 127-2Значительные изменения (ISO 9075); уровень Entry Level стандарта SQL-92 был принят как стандарт FIPS 127-2.
1999триггеров, базовые процедурные расширения, нескалярные типы данных и некоторые объектно-ориентированные возможности.
2003XML-данными, оконные функции (применяемые для работы с

2006SQL:2006Функциональность работы с XML-данными значительно расширена. Появилась возможность совместно использовать в запросах SQL и 2008SQL:2008Улучшены возможности оконных функций, устранены некоторые неоднозначности стандарта SQL:2003 [2]

Вопросы совместимости

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

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

Впервые понятие «уровня соответствия» было предложено в стандарте SQL-92. А именно, ANSI и NIST определяли четыре уровня соответствия реализации этому стандарту:

Легко можно понять, что каждый последующий уровень соответствия заведомо подразумевал соответствие предыдущему уровню. Далее, согласно данной лесенке стандартов любая СУБД, которая соответствовала уровню Entry, могла заявлять себя как «SQL-92 compliant», хотя на самом деле переносимость и соответствие стандарту ограничивалось набором возможностей, входящих в этот уровень.

Положение изменилось с введением стандарта SQL:1999. Отныне стандарт приобрёл модульную структуру — основная часть стандарта была вынесена в раздел «SQL/Foundation», все остальные были выведены в отдельные модули. Соответственно, остался только один уровень совместимости — Core, что означало поддержку этой основной части. Поддержка остальных возможностей оставлена на усмотрение производителей СУБД. Аналогичное положение имело место и с последующими версиями стандарта.

Преимущества и недостатки

Преимущества

Независимость от конкретной СУБД

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

Наличие стандартов

Наличие стандартов и набора тестов для выявления совместимости и соответствия конкретной реализации SQL общепринятому стандарту только способствует «стабилизации» языка. Правда, стоит обратить внимание, что сам по себе стандарт местами чересчур формализован и раздут в размерах, например, Core-часть стандарта SQL:2003 представляет собой более 1300 страниц текста.

Декларативность

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

Недостатки

Несоответствие реляционной модели данных

Создатель реляционной модели данных Эдгар Кодд, Кристофер Дейт и их сторонники указывают на то, что SQL не является истинно реляционным языком. В частности они указывают на следующие проблемы SQL [3] :

В опубликованном Кристофером Дейтом и Хью Дарвеном Третьем Манифесте [4] они излагают принципы СУБД следующего поколения и предлагают язык Tutorial D, который является подлинно реляционным.

Сложность

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

Отступления от стандартов

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

Сложность работы с иерархическими структурами

Расширения

Процедурные расширения

Поскольку SQL не является языком программирования (то есть не предоставляет средств для автоматизации операций с данными), вводимые разными производителями расширения касались в первую очередь процедурных расширений. Это хранимые процедуры (англ. stored procedures ) и процедурные языки-«надстройки». Практически в каждой СУБД применяется свой процедурный язык. Подобные языки для самых популярных СУБД приведены в следующей таблице.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *