PHP без БД и MySQL

Переменные:

Массивы:

Функции:

Передача переменных

Глобальный массив

Инструкция INCLUDE

Операторы SGL

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

Синтаксис - это своего рода план построения оператора, который интерпретируется РСУБД.

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

Работа с синтаксисом операторов.

Создавая SQL-оператор, вы должны придерживаться синтаксиса.

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

Рассмотрим пример синтаксиса оператора для того, чтобы легче было представить себе, как составляется SQL-оператор. Это синтаксис для MySQL-оператора CREATE TABLE.
<определение_таблицы>::=
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] <имя_таблицы>
(<элемент_таблицы> [{, <элемент_таблицы>}...])
[ENGINE = {BDB | MEMORY | ISAM | INNODB | MERGE | MRG_MYISAM | MYISAM}]
<элемент_таблицы>::=
{<имя_столбца> <тип> [NOT NULL | NULL] [DEFAULT <значение>] [AUTO_INCREMENT]}
I [PRIMARY KEY (<имя_столбца> [{, <имя_столбца>}...])}
I (INDEX [<имя_индекса>] (<имя_столбца> [{, <имя_столбца>}...])}

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

  • Вертикальная черта (|). Вертикальная черта, по сути, означает “или”. Опции, из которых можно выбрать только какую-нибудь одну (или более), отделяются друг от друга вертикальной чертой. Например, в шестой строке показанного синтаксиса можно выбрать опцию NOT NULL или опцию NULL.
  • Квадратные скобки ( [ ] ). Квадратные скобки означают, что заключенный в них синтаксис является необязательным.
  • Угловые скобки (<>). Угловые скобки обозначают, что заключенный в них синтаксис представляет собой заполнитель, т.е., что на их месте и, соответственно, на месте заключенного в них текста должно быть указано конкретное значение.
  • Фигурные скобки ({}). Фигурные скобки означают, что заключенный в них синтаксис должен восприниматься как одно целое. То есть если используется один из указанных внутри фигурных скобок элементов, значит, применяются и все остальные находящиеся внутри них элементы, кроме тех, что отделены друг от друга вертикальной чертой.
  • Троеточие (...). Троеточие означает, что предшествующая ему конструкция может повторяться любое необходимое количество раз.
  • Два двоеточия/знак равенства (: : =). Комбинация : : = показывает, что далее идет описание заполнителя. Она делает буквально то же самое, что и знак равенства. Синтаксис, находящийся справа от нее, является определением для заполнителя, находящегося слева от нее.
  • Как только вы разберетесь, как и где используются эти шесть символов, вы сможете интерпретировать практически любой синтаксис.

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

    Ключевое слово - это зарезервированное слово или набор зарезервированных слов, которые являются частью словаря SQL. Ключевые слова определяют действие оператора и то, как это действие должно выполняться.
    Например, ключевые слова CREATE TABLE указывают, что данный оператор выполняет создание таблицы.

    Обычно ключевые слова представлены заглавными буквами, благодаря чему они отличаются от указателей места заполнения, но SQL является языком, нечувствительным к регистру символов, поэтому заглавные буквы используются для ключевых слов в принципе только для того, чтобы сделать код более удобочитаемым. Вы запросто можете написать и Create Table, и create table, и даже CREate table: MySQL будет интерпретировать этот код одинаково.

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

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

    Первая строка синтаксиса:

    <определение_таблицы>::=

    Этот синтаксис дословно означает, что заполнитель <определение_таблицы> эквивалентен следующему за ним синтаксису. В имеющей отношение к SQL документации такая вводная строка часто опускается, потому что она редко когда бывает действительно нужна в начале синтаксиса. Обычно синтаксис сам достаточно понятно раскрывает предназначение оператора. Однако здесь она была включена для того, чтобы вы знали, как она выглядит, и могли распознать ее, если она вам вдруг встретится в документации по SQL.

    Вторая строка синтаксиса:

    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] <имя_таблицы>

    Эта строка фактически является первой частью оператора CREATE TABLE. Обратите внимание на ключевое слово TEMPORARY, которое стоит между ключевыми словами CREATE и TABLE. Поскольку это ключевое слово заключено в квадратные скобки, оно является необязательным. Его следует применять только тогда, когда нужно создать временную таблицу. (О временных таблицах будет подробно рассказываться в главе 5.) Из-за этого необязательного ключевого слова определение таблицы может начинаться как с конструкции CREATE TABLE, так и с конструкции CREATE TEMPORARY TABLE.

    Далее в этой строке синтаксиса идут ключевые слова IF NOT EXISTS. Опять-таки, эти ключевые слова являются необязательными и должны использоваться только при необходимости сделать так, чтобы при выполнении данного оператора осуществлялась проверка на наличие в базе данных таблицы с таким именем. Однако обратите внимание на то, что когда внутри квадратных скобок находится несколько слов, как в данном случае, это означает, что использоваться должны либо сразу все эти ключевые слова, либо ни одного из них. То есть указывать либо только слово IF, либо только слово NOT, либо только слово EXISTS в данной части оператора нельзя. Другими словами, нельзя создать оператор, начинающийся с такой строки:

    CREATE TABLE EXISTS <имя_таблицы>

    И, наконец, последним элементом в рассматриваемой строке синтаксиса является заполнитель <имя_таблицы>. На месте этого заполнителя должно указываться имя создаваемой таблицы. При добавлении таблицы в базу данных ей будет присвоено именно указанное здесь имя, и именно это имя затем нужно будет использовать всегда, когда нужно будет сослаться на эту таблицу. Теперь давайте посмотрим на следующую строку синтаксиса:

    (<элемент_таблицы> [ {, <элемент_таблицы>}...])

    Первое, на что здесь следует обратить внимание - это то, что все элементы заключены в круглые скобки. Элементы, заключенные в круглые скобки (и не заключенные при этом в квадратные скобки), являются обязательными. То есть в данной строке обязательным является только элемент (<элемент_таблицы>). Поскольку заполнитель <элемент_таблицы> предполагает указание не только имени объекта (т.е. имеет более сложный синтаксис), он описывается далее в этом коде.

    Запомнить следующее:

    Обязательно присутствовать должен, по крайней мере один компонент <элемент_таблицы>, но вообще их можно добавлять столько, сколько нужно (тогда синтаксис становится немного сложнее).

    Обратите внимание, что несколько элементов заключены в квадратные скобки - [ {, <элемент_ таблицы>}. . . ].

    Это говорит о том, что данная часть синтаксиса является необязательной. Однако внутри квадратных скобок присутствуют еще также и фигурные скобки — {, <элемент_таблицы>}, после которых стоит знак троеточия.

    Эти фигурные скобки означают, что находящиеся внутри них элементы должны восприниматься как одно целое, а знак троеточия - что эти элементы (все вместе) могут повторяться любое необходимое количество раз. То есть добавляя в свой оператор дополнительный элемент <элемент_таблицы>, вы должны обязательно ставить перед ним запятую, и делать это вы можете сколько угодно раз.

    Например, если вы хотите, чтобы ваш оператор включал четыре элемента таблицы, то должны использовать такой синтаксис:
    (<элемёнт_таблицы>, <элемент_таблицы>, <элемент_таблицы>, <элемент_таблицы>)

    Как видите, добавляя в оператор несколько элементов <элемент_таблицы>, вы после каждого из них, кроме последнего, должны обязательно ставить запятую. И не забудьте, что вы еще также должны обязательно заключить все эти элементы в круглые скобки.

    Посмотрим на следующую строку:

    [ENGINE = {BDB | MEMORY | ISAM | INNODB | MERGE | MRG_MYISAM | MYISAM}]

    Первое - вся строка заключена в квадратные скобки, а это значит, что вся эта строка является необязательной. Эта строка позволяет задавать тип создаваемой таблицы. Решив все-таки использовать эту строку в своем операторе CREATE TABLE, вы должны указать ENGINE= и одну из представляющих тип таблицы опций. О том, что вам разрешено выбрать только одну опцию, свидетельствует разделяющая все перечисленные опции вертикальная черта. То есть вы можете прочитать эту строку и так:

    BDB или MEMORY или ISAM или INNODB и т.д.

    Например, если вы хотите создать именно таблицу типа INNODB, то должны включить в свой оператор CREATE TABLE приведенную ниже строку:

    ENGINE = INNODB

    Вы уже в принципе должны понимать, как формируется оператор CREATE TABLE. Однако, как вы помните, заполнитель <элемент_таблицы> не является обычным элементом, о котором достаточно знать только то, где и как он используется. Именно поэтому дальше в синтаксисе описываются компоненты, из которых может состоять элемент <элемент_таблицы>. Понять то, что дальше идет описание заполнителя <элемент_таблицы> вы можете по тому, что перед этим описанием, а именно - в первой строке следующего раздела синтаксиса, содержится сам заполнитель:

    <элемент_таблицы>::=

    Эта строка показывает, что далее следует определение заполнителя <элемент_ таблицы>. Прежде чем мы приступим к подробному анализу первой строки в этом определении, давайте посмотрим на все строки, из которых оно состоит.
    {<имя_столбца> <тип> [NOT NULL | NULL] [DEFAULT <значение>] [AUTO_INCREMENT]}
    | {PRIMARY KEY (<имя_столбца> [{, <имя_столбца>}...])}
    | {INDEX [<имя_индекса>] (<имя_столбца> [{, <имя_столбца>}...])}

    Бросается в глаза то, что две последних строки начинаются с символа вертикальной черты, а также то, что все три эти строки заключены в фигурные скобки. Это означает, что каждая строка представляет собой одну из опций, которые могут использоваться для определения заполнителя <элемент_таблицы>.

    Другими словами, для каждого включаемого в оператор CREATE TABLE заполнителя <элемент_ таблицы> может быть определен столбец, первичный ключ или индекс.

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

    Теперь давайте посмотрим на первую строку определения <элемент_таблицы>:

    {<имя_столбца> <тип> [NOT NULL | NULL] [DEFAULT <значение>] [AUTO_INCREMENT]}

    Эта строка определяет столбец в таблице. Обязательными элементами здесь являются <имя_столбца> и <тип>. Последний представляет собой тип данных, которые могут сохраняться в данном столбце. В этой строке также присутствует три необязательных элемента.

    Первый из них - [NOT NULL | NULL] - означает, что вы можете установить для столбца опцию NOT NULL или NULL. Нулевым значением (или значением NULL) называют значение, которое не определено или не известно.

    Нулевое значение - это не то же самое, что значение 0 или пустое значение. Нулевое значение означает, что значение просто отсутствует.

    Таким образом, опция NOT NULL позволяет указывать, что данный столбец не может содержать нулевых значений, а опция NULL, соответственно - что столбец может содержать нулевые значения.

    Следующий необязательный элемент в определении столбца выглядит как [DEFAULT <значение>]. Эта опция позволяет указывать значение, которое должно вставляться в данный столбец автоматически, если при создании строки в него никакое значение не помещается. Используя в определении столбца ключевое слово DEFAULT, вы должны также обязательно указывать на месте заполнителя <значение> какое-то значение.

    И, наконец, последним необязательным элементом в определении столбца является опция [AUTO INCREMENT]. Вы должны включать эту опцию в свое определение только тогда, когда хотите, чтобы MySQL автоматически генерировала для данного столбца последовательные номера каждый раз, когда в таблицу будет добавляться новая строка.

    Из трех опций, которые доступны в определении <элемент_таблицы>, вы чаще всего будете пользоваться именно той, что позволяет создавать определение для столбца. Однако, как уже говорилось ранее, вы можете выбрать любую из них, поэтому давайте теперь рассмотрим вторую строку:
    |{PRIMARY KEY (<имя_столбца> [{, <имя_столбца>}...])}
    Эта строка позволяет создавать для таблицы первичный ключ. Решив воспользоваться этой опцией, вы должны обязательно указать ключевые слова PRIMARY KEY и, по крайней мере, одно заключенное в круглые скобки имя столбца. Элементы, перечисленные в квадратных скобках— [ {, <имя_столбца>}. . . ] — означают, что вы также можете добавить один или более дополнительных столбцов и что перед каждым из этих дополнительных столбцов вы должны обязательно поставить запятую.
    Например, если вы хотите создать первичный ключ, состоящий из трех столбцов, то должны использовать такой синтаксис:
    PRIMARY KEY (<имя_столбца>, <имя_столбца>, <имя столбца>)
    Не волнуйтесь, если вы не знаете, как создаются первичные ключи или как можно сделать так, чтобы они состояли из нескольких столбцов. Об этом достаточно подробно будет рассказываться в главе 5.
    Теперь давайте рассмотрим последний необязательный элемент в определении

    <элемент_таблицы>:
    I {INDEX [<имя_индекса>] (<имя_столбца> [{, <имя_столбца>}...]) }

    Эта строка позволяет создавать индекс. Если вы решите воспользоваться этой опцией, знайте, что вы обязательно должны указать ключевые слова PRIMARY KEY и, по крайней мере, одно заключенное в круглые скобки имя столбца. Как и в случае создания первичного ключа, здесь разрешено добавлять дополнительные столбцы, предваряя каждый из них запятой. Однако в отличие от первичного ключа, имя индекса является необязательным. Давать или не давать имя индексу - решать вам, хотя в принципе считается, что лучше, чтобы имена были у всех объектов в базе данных.

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