Помощь в написании студенческих работ
Антистрессовый сервис

Структура языка SQL

РефератПомощь в написанииУзнать стоимостьмоей работы

Не многие программисты создают базу данных программным путём, большинство из нас для этого используют некую визуальную среду наподобие MS Access для построения файла MDB. Но иногда нам всё-таки приходится создавать и удалять базу данных, а так же объекты базы данных программным путём. Для этого используется наиболее распространённая на сегодняшний день технология Structured Query Language Data… Читать ещё >

Структура языка SQL (реферат, курсовая, диплом, контрольная)

Оператор SQL состоит из зарезервированных слов, а также из слов, определяемых пользователем. Зарезервированные слова являются постоянной частью языка SQL и имеют определенное значение. Их следует записывать именно так, как указанно в стандарте, и нельзя разбивать на части для переноса из одной строки в другую. Слова, определяемые пользователем, задаются самим пользователем и представляют собой имена различных объектов базы данных — таблиц, столбцов, представлений, индексов и т. д. Слова в операторе размещаются в соответствии с установленными синтаксическими правилами. Хотя в стандарте это не указанно, многие диалекты языка SQL требуют задания в конце оператора некоторого символа, обозначающего окончание его текста (как правило используется). Большинство компонентов операторов SQL не чувствительны к регистру. Это означает, что могут использоваться любые буквы — как строчные, так и прописные. Одним важным исключением из этого правила являются символьные литералыданные которые должны вводиться точно также, как были введены соответствующие им значения, хранящиеся в базе данных.

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

Язык SQL представляет собой совокупность:

  • * операторов,
  • * инструкций,
  • * и вычисляемых функций.

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

Операторы SQL делятся на:

  • * операторы определения данных (Data Definition Language, DDL):
  • * CREATE SCHEMA — создать схему базы данных
  • * DROP SHEMA — удалить схему базы данных
  • * CREATE TABLE — создать таблицу
  • * ALTER TABLE — изменить таблицу
  • * DROP TABLE — удалить таблицу
  • * CREATE DOMAIN — создать домен
  • * ALTER DOMAIN — изменить домен
  • * DROP DOMAIN — удалить домен
  • * CREATE COLLATION — создать последовательность
  • * DROP COLLATION — удалить последовательность
  • * CREATE VIEW — создать представление
  • * DROP VIEW — удалить представление

Не многие программисты создают базу данных программным путём, большинство из нас для этого используют некую визуальную среду наподобие MS Access для построения файла MDB. Но иногда нам всё-таки приходится создавать и удалять базу данных, а так же объекты базы данных программным путём. Для этого используется наиболее распространённая на сегодняшний день технология Structured Query Language Data Definition Language (SQL DDL). Выражения языка определения данных (DDL) — это SQL выражения, которые поддерживают определения или объявления объектов базы данных (например, CREATE TABLE, DROP TABLE, CREATE INDEX либо подобные им). В этом подразделении SQL рассматривается создание, изменение и удаление таблиц это относится к самим таблицам, а не к данным, которые в них содержатся. Таблицы создаются командой CREATE TABLE. Эта команда создает пустую таблицу — таблицу без строк. Значения вводятся с помощью DML команды INSERT.

Команда ALTER TABLE не часть стандарта ANSI; но это — широко доступная, и довольно содержательная форма, хотя ее возможности несколько ограничены. Она используется, чтобы изменить определение существующей таблицы. Обычно, она добавляет столбцы к таблице. Иногда она может удалять столбцы или изменять их размеры, а также в некоторых программах добавлять или удалять ограничения. Типичный синтаксис чтобы добавить столбец к таблице:

ALTER TABLE.

ADD;

Синтаксис для удаления таблицы, если конечно она является пустой, следующая:

DROP TABLE.

;

(УДАЛИТЬ) СинтаксисFROM.

{[WHERE ]; } | WHERE CURRENT OF

Если предложение WHERE отсутствует, ВСЕ строки таблицы удаляются. Если предложение WHERE использует предикат, строки, которые удовлетворяют условию этого предиката удаляются. Если предложение WHERE имеет аргумент CURRENT OF (ТЕКУЩИЙ) в имени курсора, строка из таблицы.

на которую в данный момент имеется ссылка с помощью имени курсора будет удалена. Форма WHERE CURRENT может использоваться только во вложенном SQL, и только с модифицируемыми курсорами.

операторы манипуляции данными (Data Manipulation Language, DML):

  • * SELECT — отобрать строки из таблиц
  • * INSERT — добавить строки в таблицу
  • * UPDATE — изменить строки в таблице
  • * DELETE — удалить строки в таблице
  • * COMMIT — зафиксировать внесенные изменения
  • * ROLLBACK — откатить внесенные изменения

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

К базовым средствам манипулирования данными языка SQL относятся «поисковые» варианты операторов UPDATE и DELETE. Эти варианты называются поисковыми, потому что при задании соответствующей операции задается логическое условие, налагаемое на строки адресуемой оператором таблицы, которые должны быть подвергнуты модификации или удалению. Кроме того, в такую категорию языковых средств входит оператор Запрос — команда, которую вы даете вашей программе базы данных, и которая сообщает ей, чтобы она вывела определенную информацию из таблиц в память. Эта информация обычно посылается непосредственно на экран компьютера или терминала, которым вы пользуетесь, хотя, в большинстве случаев, ее можно также послать принтеру, сохранить в файле (как объект в памяти компьютера), или представить как вводную информацию для другой команды или процесса.

Все запросы в SQL состоят из одиночной команды. Эта команда называется — SELECT (ВЫБОР).

Синтаксис команды:

{IDISTINCT | ALL] .}/*.

[INTO (*embedded only*)].

.

[WHERE ].

[GROUP BY .].

[HAVING ].

[ORDER BY [ASC | DESC]. .];

Применяются следующие правила:

Если ни ALL, ни DISTINCT — не указаны, принимается — ALL.

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

Ссылаемая таблица.

состоит из имени таблицы, включая пре-фикс владельца, если текущий пользователь не владелец, или синоним (нестандартно) для таблицы. Таблица может быть или базовой таблицей или просмотром. В принципе, псевдоним может указать, какой синонимом используется для таблицы только на время текущей команды. Имя таблицы или синоним должны отделяться от псевдонима одним или более разделительными знаками.

Значения могут быть помещены и удалены из полей, тремя командами языка DML (Язык Манипулирования Данными):

INSERT (ВСТАВИТЬ),.

UPDATE (МОДИФИЦИРОВАТЬ),.

DELETE (УДАЛИТЬ).

INSERT (ВСТАВКА) Синтаксис.

INTO.

() VALUES () |;

INSERT создает одну или больше новых строк в таблице с именем.

.

Если используется предложение VALUES, их значения вставляются в таблицу с именем.

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

Синтаксис язык база sql реляционный.

SET { = }.

{[WHERE ]; } | {[WHERE CURRENT OF ] ]}.

UPDATE изменяет значения в каждом столбце с именем на соответствующее значение. Если предложение WHERE использует предикат, то только строки таблиц чьи текущие значения делают тот предикат верным, могут быть изменены. Если WHERE использует предложение CURRENT OF, то значения в строке таблицы с именем.

находящиеся в курсоре с именем меняются. WHERE CURRENT OF пригодно для использования только во вложенном SQL, и только с модифицируемыми курсорами.

При отсутствия предложения WHERE — все строки меняются.

  • * операторы определения доступа к данным (Data Control Language, DCL):
  • * GRANT предоставляет пользователю (группе) разрешения на определенные операции с объектом,
  • * REVOKE отзывает ранее выданные разрешения,
  • * DENY задает запрет, имеющий приоритет над разрешением;

Язык баз данных для осуществления административных функций, присваивающих или отменяющих право (привилегию) использовать базу данных, таблицы в базе данных, а также выполнять те или иные операторы SQL. Выдавать и забирать права доступа к таблице может владелец таблицы. Администратор базы данных (имеющий DBA права), а так же пользователь, которому было выдано право выдавать права (операторам GRANT WITH GRANT OPTIONS).

REVOKE ALL ON customer FROM PUBLIC.

GRANT ALL ON customer TO morozova, shumskiy WITH GRANT OPTION.

GRANT UPDATE (fname, iname, company, sity), SELECT.

ON customer TO PUBLIC.

REVOKE CONNECT FROM dubcova, root.

REVOKE DBA FROM morozova.

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

BEGIN WORK.

LOCK TABLE kadry.

LOCK TABLE kadry EXCLUSIVE.

Можно установить для программы режим «ждать разблокирования строк».

SET LOCK MODE TO WAIT.

  • * операторы управления транзакциями (Transaction Control Language, TCL):
  • * COMMIT применяет транзакцию,
  • * ROLLBACK откатывает все изменения, сделанные в контексте текущей транзакции,
  • * SAVEPOINT делит транзакцию на более мелкие участки.

В базе данных, не имеющих системного журнала невозможно выполнение транзакций и восстановления до текущей контрольной точки. Поскольку за все хорошее приходится платить, наличие системного журнала у базы данных вызывает заметный рост накладных расходов и замедления работы запросов. К тому же при активной работе с базой системный журнал быстро «распухает». За ним необходимо следить и периодически чистить.

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

Есть несколько важных правил, которых стоит придерживаться при выполнении процедуры восстановления:

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

Для получения описания областей хранения необходимых для восстановления копии, используйте утилиту PROREST с параметромlist. Синтаксис следующий:

prorest db-name device-namelist.

OpenEdge Release 10.1B as of Fri MAR 7 02:56:17 EST 2014.

Area Name: Schema Area.

Size: 7680, Records/Block: 32, Area Number: 6, Cluster Size: 1.

Area Name: Info Area.

Size: 1024, Records/Block: 32, Area Number: 7, Cluster Size: 1.

Area Name: Customer/Order Area.

Size: 2560, Records/Block: 32, Area Number: 8, Cluster Size: 8.

Area Name: Primary Index Area.

Size: 32, Records/Block: 1, Area Number: 9, Cluster Size: 8.

Area Name: Customer Index Area.

Size: 256, Records/Block: 1, Area Number: 10, Cluster Size 64.

Area Name: Order Index Area.

Size: 8192, Records/Block: 32, Area Number: 11, Cluster Size 64.

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

Восстановления баз данных OpenEdge и транзакций, в случаях системных или дисковых сбоев.

OpenEdge RDBMS имеет три механизма восстановления:

  • * Crash recovery — использует данные BI
  • * Roll-forward recovery — использует резервные копии и After-image для восстановления после дисковых сбоев
  • * Two-phase commit — гарантирует завершении транзакция между несколькими базами данных

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

Crash recover работает в автоматическом режиме. Он использует информацию из primary recovery log (BI), для восстановления после системных сбоев. BI файл является активной частью базы данных. Он рассматривается как неотъемлемая часть базы данных. Когда происходит копирование и восстановление базы данных, вместе с базой копируется и восстанавливается BI файл. Никогда не удаляйте файлы BI в ручную.

Когда база данных работает, информация о транзакциях базы хранится в трех местах:

  • * В базе данных на диске
  • * В буфере памяти
  • * В BI файлах на диске

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

Перед изменением базы данных, движок базы делает копию текущих данных и записывает ее в файл BI. Это происходит по завершению операции изменения. Если происходит системный сбой во время транзакции, движок базы восстанавливает из BI файла базу данных в предшествующее состояние. Движок использует информацию BI файла, также, и при нормальной работе, для отката транзакций.

Например, допустим, выполняется следующая программа на языке ABL (Advanced Business Language):

FOR EACH customer:

UPDATE name max-credit.

END.

Мы изменили записи о клиенте 1 и 2, и пока меняли данные о клиенте 3, произошел системный сбой. При перезагрузке базы данных (.lg), в логе базы данных появятся следующие сообщения:

  • 11:13:54 Single-user session begin for marshall on /dev/pts/25 (451)
  • 11:13:54 Begin Physical Redo Phase at 256. (5326)
  • 11:13:56 Physical Redo Phase Completed at blk 800 of 8165 and 31 829 (7161)
  • 11:13:56 Begin Physical Undo 1 transactions at blk 800 offset 8189 (7163)
  • 11:14:38 Physical Undo Phase Completed at 1020. (5331)
  • 11:14:38 Begin Logical Undo Phase, 1 incomplete transactions are being backed out. (7162)
  • 11:14:38 Logical Undo Phase Complete. (5329)
  • 11:14:46 Single-user session end. (334)

В сообщении указаны фазы crash recovery, которые выполняет движок базы данных для приведения базы в состояние до системного сбоя. Движок выполняет crash recovery каждый раз, когда вы открываете базу данных, но не все фазы восстановления отображаются в логе базы.

Если после этого перезапустить программу, то мы обнаружим, что клиенты 1 и 2 были изменены, а клиент 3 остался без изменений, так как на основании BI файла движок вернул его информацию в первоначальное состояние.

Crash recovery защищает базу от системных сбоев, но не сможет защитить ее от ошибок носителей. В случае ошибок носителя или его полной потери, восстановление базы возможно только из резервной копии, при этом необходимо вручную провести все транзакции заново до момента сбоя, либо использовать механизм roll-forward recovery, если он был активирован на базе до сбоя.

Roll-forward recovery совместно использует after-imaging и резервную копию базы, позволяя восстанавливать ее после ошибок или после потери носителя. Используйте последнюю резервную копию, а затем roll-forward recovery для восстановления базы в состояние до возникновения ошибки или до потери носителя. Этот механизм использует информацию из AI файлов для последовательного наката транзакций, совершенных после формирования последней резервной копии, до возникновения сбоя.

Для использования механизма roll-forward recovery, необходимо:

  • * Постоянно выполнять резервные копии, т.к. они являются основой для работы механизма.
  • * Активировать на базе данных механизм After-imaging
  • * Постоянно делать резервные копии сформированных AI — файлов.
  • * Храните AI-файлы на другом диске, отличном от того на котором находятся база данных и BI-файлы.

При активированном After — imaging, информация об изменениях записывается движком базы в AI-файлы. Если ai-файлы будут храниться на том же диске, что и база данных или BI — файлы, то в случае повреждения диска, вы будете не в состоянии восстановить базу данных.

Следующий пример, показывает как AI — файлы используются для восстановления базы данных. Допустим, что выполняется следующая программа ABL:

FOR EACH customer:

UPDATE name max-credit.

END.

Вы изменяете клиентов 1 и 2, но в момент изменения данных о клиенте 3, происходит повреждение диска, на котором хранится база данных. Вы не можете использовать BIфайл для восстановления транзакций, т.к. база данных находится в поврежденном состоянии или полностью потеряна.

Тем не менее, если after-imaging был активирован, для восстановления базы можно использовать механизм roll-forward recovery. Иначе, мы потеряли бы все внесенные изменения в базу данных с момента формирования последней резервной копии.

Перед изменением базы данных, движок помечает изменения как текущие и сохраняет их в BI и AI файлы. AI-файлы содержат копии всех завершенных транзакций с момента последней резервной копии. Восстановите последнюю копию базы данных, и запустите механизм roll-forward recovery, для воспроизведения всех завершенных транзакций, таким образом, мы получим полноценную базу данных до момента сбоя.

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

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

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

Доступ к SQL Server предусмотрен из большого числа средств разработки клиентских приложений, настольных баз данных и офисных продуктов. Изначально SQL адаптирован под взаимодействие с другими серверами BackOffice, что благоприятствует прямо охватить решение комплексных задач хранения и обработки информации, электронного документооборота, создания интернет-приложений и т. д. SQL используется как в стандартных клиент-серверных платформах, так и в многоуровневых средах. Microsoft Transaction Server является одним из главных инструментов при создании распределенных приложений.

В последних стандартах языка SQL содержатся:

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

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

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

  • · повторяющиеся строки;
  • · неопределённые значения (nulls);
  • · явное указание порядка колонок слева направо;
  • · колонки без имени и дублирующиеся имена колонок;
  • · отсутствие поддержки свойства «=»;
  • · использование указателей;
  • · высокая избыточность.

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

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

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

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

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

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

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

Показать весь текст
Заполнить форму текущей работой