Вы находитесь на странице: 1из 7

Лекции курса PHP7 + MySQL с нуля

(краткое содержание)

ЛЕКЦИЯ 46. ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ PHP. БАЗЫ ДАННЫХ.


ТЕОРИЯ.

Основы
В этом уроке Вы рассмотрите такое явление, как реляционные базы данных –
комплекс взаимосвязанных между собой данных, хранящихся в двумерных
массивах, выраженных в виде табличных структур. В качестве примера простой
базы данных можно привести электронные таблицы Excel.
Для управления базой данных необходимо программное обеспечение,
называемое системой управления базами данных (СУБД). Одной из таких СУБД
является MySQL, которая и будет далее рассматриваться в качестве примера.
Базы данных намного удобнее и эффективнее с точки зрения хранения
информации и обращения с ней, если сравнивать с созданием набора файлов и
работу с ними.
Кроме того, быстродействие работы с базами данных связано еще и с тем, что
данные, расположенные в БД не просто вписаны туда «в сплошную», а
упорядочены и поддерживаются в таком состоянии постоянно.
При этом возникает вопрос, каким образом данные идентифицируются и
упорядочиваются в конкретную строку. С этой целью в таблице создается ячейка
или несколько ячеек, которые содержат значения, уникальные для всей таблицы.
Одну из таких ячеек выбирают для создания первичного ключа (primary key),
который и отвечает за идентификацию данных в строке и привязку их к общей
структуре таблицы.
При создании реляционной базы данных необходимо придерживаться
нескольких основополагающих правил:
1. Каждая таблица состоит из однотипных строк и имеет уникальное имя.
2. Строки имеют фиксированное число полей (столбцов) и значений
(множественные поля и повторяющиеся группы недопустимы). Иначе говоря, в
каждой позиции таблицы на пересечении строки и столбца всегда имеется в
точности одно значение или ничего.
3. Строки таблицы обязательно отличаются друг от друга хотя бы
единственным значением, что позволяет однозначно идентифицировать любую
строку такой таблицы.
4. Столбцам таблицы однозначно присваиваются имена, и в каждом из них
размещаются однородные значения данных (даты, фамилии, целые числа или
денежные суммы).
5. Полное информационное содержание базы данных представляется в виде
явных значений данных и такой метод представления является единственным. В
частности, не существует каких-либо специальных "связей" или указателей,
соединяющих одну таблицу с другой.
6. При выполнении операций с таблицей ее строки и столбцы можно
обрабатывать в любом порядке безотносительно к их информационному
содержанию. Этому способствует наличие имен таблиц и их столбцов, а также
возможность выделения любой их строки или любого набора строк с указанными
признаками.

Работа с базами данных


Используя СУБД MySQL используется специализированный язык SQL.
При работе с базой данных через СУБД возможные следующие действия:
- создание и удаление баз данных;

1
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

- создание и удаление составляющих базу данных таблиц;


- управление и организация данных: определение структуры БД, ее
регулирование и создание отношений между ее составляющими (таблицами и
данными);
- обработка данных: добавление, удаление, изменение;
- управление и настройка доступа к БД: ограничение возможностей доступа к
составляющим БД, защита от несанкционированного доступа и пр.;
- обеспечение целостности данных – защита от разрушения;
- управление состоянием и параметрами СУБД.
Все эти действия осуществляются с помощью языка SQL при помощи
процедур, называемых запросами. Далее мы рассмотрим основные запросы,
которые позволят осуществить большинство основных операций с базами данных.

Основные запросы к базам данных в языке SQL


1) CREATE DATABASE new_db
Создает новую базу данных с именем new_db.
2) SHOW DATABASES
Выводит список всех имеющихся созданных баз данных.
3) DROP DATABASE new_db
Удаляет базу данных с именем new_db.
Примечание:
- создать базу данных можно, создав подкаталог в каталоге данных MySQL (по
умолчанию, в Windows это C:\Users\All Users\MySQL\MySQL Server X.X\Data\, а для
OpenServer: H:\OSPanel\userdata\MySQL-X.X-xXX, где X.X – версия MySQL, а xXX –
разрядность MySQL (x32 или x64);
- удалить базу данных возможно простым удалением подкаталога с нужным
именем из вышеуказанного пути расположения MySQL;
- создать базу данных с именем, которое уже используется в другой базе данных
невозможно, аналогично тому, как невозможно создать каталог с именем уже
существующего.
4) CREATE DATABASE new_db DEFAULT CHARACTER SET utf8
Создает новую базу данных с именем new_db и указывает кодировку базы
данных (в данном случае – utf-8).
5) USE new_db
Указывает на то, что последующие запросы будут относиться к базе данных с
именем new_db.
6) SHOW TABLES
Показывает список таблиц, которые присутствуют в new_db после явного
запроса SHOW new_db.
Примечание:
- в случае, если база данных не задана явно, то при последующей работе с базой
данных необходимо явно указывать полный путь к этой базе данных, а также к
таблице, например: SELECT new_db.users …, где new_db – имя базы данных, а users – имя
таблицы в базе данных new_db.
7) CREATE TABLE new_table [(create_def_1, create_def_2, …, create_def_N)]
Создает новую таблицу с именем new_table в базе данных, которая явно
задана запросом USE. Дополнительные параметры create_def_N указывают на

2
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

возможность точного именования столбцов при создании таблицы, где create_def_N


состоит из следующих параметров:
col_name TYPE PARAM_1 PARAM_2 … PARAM_N
- col_name – имя столбца;
- TYPE – тип содержимого поля;
- PARAM_1 PARAM_2 … PARAM_N – модификаторы поля, основные из которых:
- NOT NULL – означает, что поле обязательно должно быть задано и не
может содержать неопределенное значение (при инициализации новой
записи (строки) оно обязательно должно содержать значение);
- PRIMARY KEY – указывает на то, что это поле является первичным ключом
таблицы;
- AUTO_INCREMENT – указывает на автоматическое присвоение значения
ячейке при ее создании с учетом данных о предыдущих значениях для
такого столбца (например, при создании номера записи, ей будет
присвоен новый номер, которого еще не существовало ранее, при
условии, что автоинкремент не был изменен пользователем вручную);
- DEFAULT ‘value’ – задает значения поля по умолчанию, если при записи
не было задано значение явно.
8) DROP TABLE new_table
Удаляет таблицу new_table из базы данных, для которой явно задано
использование с помощью запроса USE.
Для того, чтобы перейти к рассмотрению запросов для операций над
таблицами и данными, необходимо предварительно рассмотреть типы полей,
которые могут присутствовать в таблицах баз данных.

AUTO_INCREMENT
В рассмотренном выше операторе CREATE TABLE Вы столкнулись с интересным
модификатором AUTO_INCREMENT, роль которого – автоматическое присвоение
уникального номера полю при создании новой записи в таблице. В настройках
СУБД в свойствах базы данных у администратора существует возможность
редактирования этого параметра, что позволяет настроить, например, стартовое
значение и форму отсчета. В свою очередь, рекомендуется обращаться со
свойствами этого модификатора осторожно, т. к. в случае, если изменив его
настройки отсчета при создании новой записи в поле будет создано значение, уже
имеющееся в таблице – это может привести к ошибке при дальнейших операциях
с ней, особенно в случае, если в поле с модификатором AUTO_INCREMENT
установлен модификатор PRIMARY_KEY, не допускающий дублирования значений в
записях таблицы.

Типы полей
В настоящее время набор допустимых типов полей сильно зависит от версии
СУБД, но основные из них (наиболее часто используемые) Вы рассмотрите в этой
части урока:
1) Целые числа
Общий синтаксис: prefINT [UNSIGNED], где
- pref – префикс типа поля, обозначающий диапазон значений;
- INT – тип поля, означающий целое число;
- UNSIGNED – необязательный параметр, указывающий на то, что поле будет
использовано для хранения беззнаковых чисел (>=0).

3
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

Типы целочисленных полей:


- TINYINT – диапазон от -128 до +127;
- SMALLINT – диапазон от -32768 до +32767;
- MEDIUMINT – от – 8 388 608 до + 8 388 607;
- INT – от – 2 147 483 648 до + 2 147 483 647;
- BIGINT – от -9 223 372 036 854 775 808 до + 9 223 372 036 854 775 807.
2) Вещественные числа
Общий синтаксис: TYPE [(length, decimals) UNSIGNED], где
- TYPE – тип поля;
- length – количество знакомест (ширина), в котором размещается
вещественное число;
- decimals – количество знаков в дробной части числа, которые будут
учитываться при записи в ячейку;
- UNSIGNED – параметр, аналогичный такому же параметру в целочисленном
типе.
Типы полей с вещественными числами:
- FLOAT – число с плавающей точкой небольшой точности;
- DOUBLE – число с плавающей точкой двойной точности;
- REAL – синоним DOUBLE;
- DECIMAL – дробное число, хранимое в виде строки;
- NUMERIC – синоним DECIMAL.
3) Строковые типы
Различают три основных типа строковых полей: VARCHAR-тип, TEXT-тип и BLOB-
тип.
По умолчанию в строковых типах работа со строками производится без учета
регистра символов.
Общий синтаксис VARCHAR-типа:
VARCHAR(length) [BINARY], где
- VARCHAR – тип поля;
- length – длина поля в диапазоне от 1 до 65 535;
- BINARY – параметр, указывающий на тип сохраняемых данных, при указании
которого значение в поле будет учитывать регистр символов.
Общий синтаксис TEXT-типа:
prefTEXT, где
- pref – префикс типа, означающий размер текстового поля;
- TEXT – тип поля.
Типы полей TEXT:
- TINYTEXT – поле хранит до 255 символов;
- TEXT – поле хранит до 65 535 символов;
- MEDIUMTEXT – поле хранит до 16 777 215 символов;
- LONGTEXT – поле хранит до 4 294 967 295 символов.
Для того, чтобы хранить текст с учетом регистра символов, необходимо
использовать либо необязательный параметр BINARY в типе VARCHAR, либо
использовать тип BLOB.
Общий синтаксис BLOB-типа:
prefBLOB.
Типы полей BLOB:
- TINYBLOB – хранит до 255 символов;

4
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

- BLOB – хранит до 65 535 символов;


- MEDIUMBLOB – хранит до 16 777 215 символов;
- LONGBLOB – хранит до 4 294 967 295 символов.
4) Дата и время
В MySQL возможно хранение даты и времени в нескольких форматах:
- DATE – хранит дату в формате YYYY-MM-DD (год-месяц-день);
- DATETIME – хранит дату и время в формате YYYY-MM-DD HH:MM:SS (год-месяц-
день час-минута-секунда);
- TIMESTAMP – хранит дату и время в следующих форматах: YYYYMMDDHHMMSS,
YYMMDDHHMMSS, YYYYMMDD, YYMMDD;
- TIME – хранит время в формате HH:MM:SS;
- YEAR – хранит год в форматах YY, YYYY.
Помимо рассмотренных типов полей, базы данных позволяют хранить
большое количество различных данных: географические и геометрические
координаты, документы XML или их фрагменты, наборы строк, идентификаторы
GUID и пр.

Действия с таблицами
Учитывая, что в базах данных информация хранится в таблицах, то и
основные операции производятся со столбцами, строками и ячейками этих таблиц.
Рассмотрим основные процедуры, связанные с работой с таблицами:
1) SHOW TABLES
Возвращает список таблиц выбранной БД.
2) DESCRIBE table
Показывает структуру созданной таблицы с именем table. Стоит заметить, что
оператор DESCRIBE является внутренним оператором СУБД MySQL и не относится к
другим СУБД, использующим язык SQL.
3) ALTER TABLE table coms
Оператор позволяет вносить изменения в таблицу с именем table с помощью
набора команд coms.
Основные преобразования, которые могут быть осуществлены с помощью
оператора ALTER TABLE (находящиеся в наборе команд coms):
- ADD column [FIRST|AFTER col] – добавляет новый столбец с именем column с
необязательными условиями FIRST или AFTER, где FIRST указывает на то, что столбец
необходимо создать перед столбцом с именем col, AFTER – после столбца с именем
col, а если условие не указано, то столбец column создается в конце таблицы;
- ADD PRIMARY KEY (col_1, col_2, …, col_N) – делает столбцы с именами col_1, col_2,
…, col_N первичными ключами таблицы;
- CHANGE old_name new_name TYPE – меняет имя столбца с old_name на new_name
и новый тип TYPE;
- DROP column – удаляет столбец с именем column;
- DROP PRIMARY KEY – удаляет первичные ключи таблицы.
4) INSERT [IGNORE] INTO table [(column_1, column_2, …, column_N)] VALUES (value_1,
value_2, …, value_N)
Оператор позволяет вносить новые записи (строки) в таблицу с именем table.
Содержит следующие параметры:

5
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

- необязательный параметр IGNORE определяет игнорирование ошибок и


отбрасывание некорректных значений в случае, если вносимые данные не
соответствуют типу поля;
- [(column_1, column_2, …, column_N)] – необязательный параметр,
определяющий, в какие из столбцов будут внесены значения (value_1, value_2, …,
value_3);
- (value_1, value_2, …, value_N) – значения, которые необходимо внести в таблицу
в виде единой записи (в случае, если пропущена часть [(column_1, column_2, …,
column_N)] и в значениях не указаны все столбцы таблицы, то оператор будет
вносить значения по порядку следования столбцов начиная с первого.
Примечание:
- с помощью оператора INSERT можно вносить как непосредственно значения, так
и выражения и переменные, которые содержат искомые значения, что и будет
рассмотрено в следующем уроке, посвященном взаимодействие PHP и СУБД MySQL.
- оператор INSERT имеет многострочную форму, которая позволяет вносить в
таблицу сразу несколько новых строк: INSERT [IGNORE] INTO table VALUES (value_1,
value_2, …, value_N), (value_1, value_2, …, value_N), (value_1, value_2, …, value_N), …, (value_1,
value_2, …, value_N), но в стандартных настройках MySQL использование такого
оператора приведет к ошибке по причине блокировки действий с наборами записей. Если
Вам необходимо в работе использовать возможность одновременной множественной
записи в таблицы баз данных, необходимо в настройках СУБД разблокировать доступ к
действиям с наборами записей;
- при использовании оператора INSERT в полях, для которых установлены
модификаторы AUTO_INCREMENT и DEFAULT, в случаях, когда часть оператора
[(column_1, column_2, …, column_N)] не задана явно, либо учитывает эти столбцы, а
также нет необходимости или возможности задать явно значение для модификатора
DEFAULT, достаточно в значениях value задать NULL, 0 или пустую строку “”, что
приведет к автоматическому заполнению полей: AUTO_INCREMENT заполнит поле
новым значением, а DEFAULT присвоит значение, заданное в нем по умолчанию.
5) DELETE FROM table [WHERE definition [ORDER BY column] [LIMIT rows]]
Удаляет из таблицы с именем table записи (строки) соответствующие
выражению definition (например, col_1 > 3, что означает, все записи в которых
значение в столбце col_1 больше 3).
Содержит следующие необязательные параметры:
- ORDER BY column– перед удалением сортирует таблицу по столбцу column и в
этом операторе часто используется в совокупности с параметром LIMIT;
- LIMIT rows – ограничивает удаление записей количеством rows, что позволяет
удалять первые rows записей в соответствии с условием сортировки ORDER BY.
6) TRUNCATE TABLE table
Полностью очищает таблицу table от записей.
Примечание:
- если в операторе DELETE FROM не используется конструкция WHERE…, то СУБД
воспринимает его как оператор TRUNCATE TABLE и очищает таблицу целиком.
7) UPDATE [IGNORE] table SET col_1 = exp_1 [, col_2 = exp_2, …, col_N = exp_N] [WHERE
definition ORDER BY column LIMIT rows]
Обновляет записи в таблице table в соответствии с условием SET и содержит
следующие параметры:

6
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

- [IGNORE] – необязательный параметр, рассмотренный ранее в операторе


INSERT;
- SET – команда, определяющая условия записи;
- col_1 = exp_1 [, col_2 = exp_2, …, col_N = exp_N] – перечень записей, где col_X –
имя столбца, а exp_X – выражение, в соответствии с которым меняется значение
поля в соответствующей записи;
- WHERE definition – условие выборки, которое определяет количество записей,
в которые будут внесены изменения;
- ORDER BY column – сортировку таблицы по столбцу column;
- LIMIT rows – ограничение выборки из таблицы в соответствии с количеством
записей rows, в которые будут внесены изменения оператором UPDATE.
8) REPLACE [IGNORE] INTO table [(column_1, column_2, …, column_N)] VALUES
(value_1, value_2, …, value_N)
Аналог оператора INSERT. Отличается тем, что в случае, когда новая запись
содержит PRIMARY_KEY или UNIQUE-значение (дополнительный уникальный
ключ для идентификации записи в таблице) такие же, как в старой записи, то
происходит удаление старой записи и внесение в эту запись новых данных.
Синтаксис оператора REPLACE идентичен синтаксису INSERT.
9) SELECT col_1, col_2, …, col_N FROM table [WHERE def ORDER BY cols LIMIT rows]
Оператор производит выборку из таблицы table столбцов col_1, col_2, …, col_N,
что позволяет использовать их для дальнейших операций.
Содержит параметры WHERE, ORDER BY, LIMIT аналогичные ранее
рассмотренным операторам INSERT, DELETE, UPDATE и REPLACE.
Примечание:
- помимо рассмотренных ранее WHERE, ORDER BY, LIMIT, в языке SQL существует
множество других условных инструкций, позволяющих более гибко настраивать
операторы добавления, удаления, изменения и выборки данных, например, инструкции
BETWEEN min AND max, NOT BETWEEN min AND max, NOT_IN exp, IN exp, exp LIKE var, exp
NOT_LIKE var, AND, NOT, OR и др. Кратко, суть их в следующем:
- BETWEEN указывает оператору на то, что целевые записи таблицы должны
содержать значения в диапазоне, определенном выражением min AND max, где min –
минимальное значение, max – максимальное значение, AND – логический оператор И;
- IN определяет список записей, входящих в условие exp, например (col_1 > 3), что
будет означать все записи, включающими значения больше 3;
- exp LIKE var указывает на то, что необходимо использовать условие exp, если оно
соответствует var (как пример – указать содержание в столбце всех записей, которые
содержат строковые типы, которые, в свою очередь, содержат значения с наличием в
них первой буквы «а», для чего необходимо использовать синтаксис: col_X LIKE ‘a%’, где
% означает любое количество символов или их отсутствие; в случае, если необходимо
учесть только один символ, то используется знак ‘_’);
- инструкции NOT, AND, OR означают логические НЕ, И, ИЛИ соответственно.
За более детальным списком операторов стоит обратиться к руководству
языка SQL или СУБД MySQL.
Следующий урок будет посвящен взаимосвязи между PHP и MySQL, а также
практическому использованию СУБД в веб-приложениях.