Перайсьці да зьместу

SQL

Зьвесткі зь Вікіпэдыі — вольнай энцыкляпэдыі
Гэта састарэлая вэрсія гэтай старонкі, захаваная ўдзельнікам Zedlik (гутаркі | унёсак) у 06:10, 10 лютага 2011. Яна можа істотна адрозьнівацца ад цяперашняй вэрсіі.

SQL (ˈɛsˈkjuˈɛl) — унівэрсальная кампутарная мова, якая прымяняецца для стварэньня, мадыфікацыі і кіраваньня зьвесткамі ў рэляцыйных базах зьвестак.

SQL заснаваны на рэляцыйнай алгебры.

SQL не зьяўляецца мовай праграмаваньня, а найперш інфармацыйна-лягічнай мовай, прызначанай для апісаньня захоўваемых зьвестак, для іх выманьня і зьмяненьня.

Апэратары

Апэратары SQL падзяляюцца на:

  • апэратары вызначэньня зьвестак (па-ангельску: Data Definition Language, DDL)
    • CREATE стварае аб’ект БЗ (саму базу, табліцу, уяўленьне, карыстальніка і да т. п.)
    • ALTER зьмяняе аб’ект
    • DROP выдаляе аб’ект
  • апэратары маніпуляваньня зьвесткамі (па-ангельску: Data Manipulation Language, DML)
    • SELECT чытае зьвесткі, якія адпавядаюць зададзеным умовам
    • INSERT дадае новыя зьвесткі
    • UPDATE зьмяняе існыя зьвесткі
    • DELETE выдаляе зьвесткі
  • апэратары вызначэньня досягу да зьвестак (па-ангельску: Data Control Language, DCL)
    • GRANT прадастаўляе карыстальніку або групе дазвол на пэўныя апэрацыі з аб’ектам
    • REVOKE адклікае раней выдадзеныя дазволы
    • DENY задае забарону, якая мае прыярытэт над дазволам
  • апэратары кіраваньня транзакцыямі (па-ангельску: Transaction Control Language, TCL)
    • COMMIT прымяняе транзакцыю
    • ROLLBACK скасоўвае ўсе зьмяненьні, якія былі зробленыя ў кантэксьце цяперашняй транзакцыі
    • SAVEPOINT падзяляе транзакцыю на драбнейшыя кавалкі

Перавагі

Незалежнасьць ад канкрэтнай СКБЗ

Нягледзячы на наяўнасьць дыялектаў і адрозьненьняў у сынтаксысу, у пераважнай большасьці тэксты SQL-запытаў, якія зьмяшчаюць DDL і DML, могуць быць дастаткова лёгка перанесеныя з аднае СКБЗ у іншую. Існуюць сыстэмы, распрацоўнікі якіх ад пачатку арыентаваліся на выкарыстаньне прынамсі некалькіх СКБЗ.

Наяўнасьць стандартаў

Наяўнасьць стандартаў і набору тэстаў для высьвятленьня сумяшчальнасьці і адпаведнасьці канкрэтнае рэалізацыі SQL агульнапрынятаму стандарту толькі спрыяе «стабілізацыі» мовы. Праўда, варта зьвярнуць увагу, што сам па сабе стандарт месцамі занадта фармалізаваны і раздзьмуты (напрыклад, ключавая частка стандарту SQL:2003 зьмяшчае больш за 1300 старонак тексту).

Дэклярацыйнасьць

З дапамогаю SQL праграмоўца апісвае толькі тое, якія зьвесткі неабходна выняць ці мадыфікаваць. Тое, якім чынам гэта зрабіць, вырашае СКБЗ непасрэдна пры апрацоўцы SQL-запыту. Аднак ня варта думаць, што гэта цалкам унівэрсальны прынцып — праграмоўца апісвае набор зьвестак для выбаркі ці мадыфікацыі, аднак яму пры гэтым карысна ўяўляць, як СКБЗ будзе разьбіраць тэкст ягонага запыту. Чым больш складана сканструяваны запыт, тым больш ён дапускае варыянтаў напісаньня, адрозных па хуткасьці выкананьня, але аднолькавых па выніковых наборы зьвестак.

Недахопы

Неадпаведнасьць рэляцыйной мадэлі зьвестак

Стваральнікі рэляцыйнай мадэлі зьвестак Эдгар Код, Крыстафэр Дэйт і іхнія прыхільнікі паказваюць на тое, што SQL не зьяўляецца сапраўды рэляцыйнай мовай. У прыватнасьці, яны апісваюць наступныя праблемы SQL[1]:

  • Паўтаральныя радкі
  • Нявызначаныя значэньні (nulls)
  • Яўнае пазначэньне парадку слупкоў зьлева ўправа
  • Слупкі без найменьняў і дубляваныя найменьні слупкоў
  • Адсутнасьць падтрымкі ўласьцівасьці «=»
  • Выкарыстаньне паказальнікаў
  • Высокая празьмернасьць

У апублікаваным Крыстафэрам Дэйтам і Х’ю Дарвэнам Трэцім маніфэсьце[2] яны выкладаюць прынцыпы СКБЗ наступнага пакаленьня і прапануюць мову Tutorial D, якая зьяўляецца сапраўды рэляцыйнай.

Складанасьць

Хоць SQL быў задуманы як сродак працы канчатковага карыстальніка, у рэшце рэшт ён стаў настолькі складаны, што ператварыўся ў інструмэнт праграмоўцы.

Адыход ад стандартаў

Нягледзячы на наяўнасьць міжнароднага стандарту ANSI SQL-92, многія кампаніі, што займаюцца распрацоўкай СКБЗ (напрыклад, Oracle, Sybase, Microsoft, MySQL AB, уносяць зьмены ў мову SQL. Такім чынам, зьяўляюцца спэцыфічныя для кожнай канкрэтнай СКБЗ дыялекты мовы SQL.

Цяжкасьць працы з герархічнымі структурамі

Раней дыялекты SQL большасьці СКБЗ не прапаноўвалі спосабу маніпуляцыі дрэвападобнымі структурамі. Некаторыя пастаўшчыкі СКБЗ прапаноўвалі свае рашэньні (напрыклад, Oracle ужывае выраз CONNECT BY). У цяперашні час у ANSI стандартызаваная рэкурсыўная канструкцыя WITH з дыялекту SQL DB2. У Microsoft SQL Server рэкурсыўныя запыты зьявіліся толькі ў вэрсіі MS SQL Server 2005. У вэрсіі MS SQL Server 2008 зьявіўся новы тып зьвестак — hierarchyid, які спрашчае маніпуляваньне дрэвападобнымі структурами.

Крыніцы і заўвагі

  1. ^ An Interview with Chris Date (анг.). O’Reilly Network
  2. ^ The Third Manifesto

Літаратура

  • Бен Форта. Освой самостоятельно язык запросов SQL / Пер. с англ. — 3-е изд. — М.: Диалектика, 2005. — 288 с.
  • Пол Уилтон, Джон Колби. Язык запросов SQL для начинающих / Пер. с англ. — М.: Диалектика, 2005. — 496 с.
  • К. Дж. Дейт. Введение в системы баз данных / Пер. с англ. — 8-е изд. — М.: Вильямс, 2005. — 1328 с.
  • Кевин Клайн. SQL. Справочник. — М.: Кудиц-Образ, 2006. — 832 с.