Лабораторная работа №12.Реализация запросов
Цели работы
Цель работы: Научиться управлять базой данных из приложения, написанного на языке PHP.
Теоретические сведения
Общие сведения
Условно все запросы, выполняемые к базе данных можно разделить на две большие группы: запросы выбора и запросы действия. К запросам выбора можно отнести все запросы, начинающиеся со служебного слова SELECT. К запросам действия относятся запросы:
создания/удаления базы данных;
создания/удаления/изменения таблиц;
добавления/удаления/редактирования данных.
Конечно запросов действия намного больше, но мы с ними знакомиться не будем. Иными словами запросы действия – это запросы для управления базой данных.
Запросы действия
Итак, мы рассмотрели, какие запросы относятся к запросам действия. Теперь рассмотрим, как данные запросы реализуются на языке SQL.
База данных (БД) – это совокупность связанных данных, организованных по определенным правилам, предусматривающим общие принципы описания, хранения и манипулирования, независимая от прикладных программ. Если говорить о базе данных с точки зрения ее программной реализации, то сама база данных – это контейнер для других элементов БД (таблиц, триггеров, хранимых процедур, представлений и т.д.). Таким образом, прежде чем начать работу с базой данных ее необходимо создать. Существует специальная команда SQL, предназначенная для создания базы данных. Эта команда записывается в следующем виде:
|
|
CREATE DATABASE [IF NOT EXISTS] db_name
[create_specification] ...
create_specification:
[DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
Если при создании базы данных была допущена ошибка или же какой-либо параметр изменился, то необходимо вызвать специальную команду изменения:
ALTER DATABASE [db_name]
alter_specification [, alter_specification] ...
alter_specification:
[DEFAULT] CHARACTER SET charset_name
| [DEFAULT] COLLATE collation_name
Для удаления базы данных также вызывается специальная команда:
DROP DATABASE [IF EXISTS] db_name
Как было описано выше БД – это контейнер для других элементов. Значит, чтобы БД была полноценной, в нее необходимо добавить наполнение. Основу любой БД всегда составляют таблицы. Итак, таблицы создаются при помощи команды:
CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
create_definition:
col_name type [NOT NULL | NULL] [AUTO_INCREMENT]
[PRIMARY KEY] [reference_definition]
или PRIMARY KEY (index_col_name,...)
или KEY [index_name] (index_col_name,...)
или INDEX [index_name] (index_col_name,...)
или UNIQUE [INDEX] [index_name] (index_col_name,...)
или FULLTEXT [INDEX] [index_name] (index_col_name,...)
или [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)
[reference_definition]
index_col_name:
col_name [(length)]
reference_definition:
REFERENCES tbl_name [(index_col_name,...)]
[MATCH FULL | MATCH PARTIAL]
|
|
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
Также как и БД, таблицы тоже можно редактировать:
ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]
alter_specification:
ADD [COLUMN] create_definition [FIRST | AFTER column_name ]
или ADD [COLUMN] (create_definition, create_definition,...)
или ADD INDEX [index_name] (index_col_name,...)
или ADD PRIMARY KEY (index_col_name,...)
или ADD UNIQUE [index_name] (index_col_name,...)
или ADD FULLTEXT [index_name] (index_col_name,...)
или ADD [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...)
[reference_definition]
или ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
или CHANGE [COLUMN] old_col_name create_definition
[FIRST | AFTER column_name]
или MODIFY [COLUMN] create_definition [FIRST | AFTER column_name]
или DROP [COLUMN] col_name
или DROP PRIMARY KEY
или DROP INDEX index_name
или DISABLE KEYS
или ENABLE KEYS
или RENAME [TO] new_tbl_name
или ORDER BY col
или table_options
Кроме того можно выполнять удаление таблицы при помощи:
DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...]
После того как все таблицы БД созданы необходимо наполнить их содержимым:
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
Или
INSERT INTO table_name
VALUES (value1, value2, value3,...)
Первый вариант используется при заполнении не всех полей таблицы. В этом случае после имени таблицы необходимо перечислить заполняемые поля, а после служебного слова VALUES в том же порядке необходимо записать значения этих полей.
|
|
Второй вариант используется, когда заполняются все поля таблицы. В этом случае нет необходимости перечислять их все, однако значения полей так же должны идти в порядке следования полей в таблице. Поскольку не всегда бывает возможным знать этот порядок, для занесения данных во все поля таблицы также можно использовать первый вариант. Только в этом случае необходимо после имени таблицы перечислить все поля.
Редактирование значений в таблице осуществляется при помощи:
UPDATE table_name
SET column1=value, column2=value2,...
WHEREsome_column=some_value
Удаление данных осуществляется:
DELETE FROM table_name
WHERE some_column=some_value
Операции над отношениями
Классические операции.
Объединениемдвух совместимых отношений R1 и R2 одинаковой размерности (RlUNIONR2) является отношение R, содержащее все элементы исходных отношений (с исключением повторений).
Пример 1
Пусть отношением R1 будет множество поставщиков из Лондона, а отношение R2 — множество поставщиков, которые поставляют деталь Р1. Тогда отношение R обозначает поставщиков, находящихся в Лондоне, или поставщиков, выпускающих деталь Р1, либо тех и других.
|
|
Отношение R1
П# | Имя | Статус | Город_п |
S1 | Сергей | 20 | Москва |
S2 | Николай | 20 | Москва |
Отношение R2
П# | Имя | Статус | Город_п |
S1 | Сергей | 20 | Москва |
S2 | Иван | 10 | Киев |
Отношение R(R1 UNION R2) – результирующее отношение содержит все элементы исходных отношений
П# | Имя | Статус | Город_п |
S1 | Сергей | 20 | Москва |
S2 | Иван | 10 | Киев |
S4 | Николай | 20 | Москва |
Вычитание (разность)совместимых отношений R1 и R2 одинаковой размерности (RlMINUSR2) есть отношение, тело которого состоит из множества кортежей, принадлежащих R1, но не принадлежащих отношению R2.
Для тех же отношений R1 и R2 из примера 1 отношение R будет представлять собой множество поставщиков, находящихся в Лондоне, но не выпускающих деталь Р1, т. е. R={(S4, Николай, 20, Москва)}.
П# | Имя | статус | Город_п |
S4 | Николай | 20 | Москва |
Заметим, что результат операции вычитания зависит от порядка следования операндов, т. е. Rl MINUS R2 и R2 MINUS R1 — не одно и то же.
Пересечениедвух совместимых отношений R1 и R2 одинаковой размерности (RlINTERSECTR2) порождает отношение R с телом, включающим в себя кортежи, одновременно принадлежащие обоим исходным отношениям.
Для отношений R1 и R2 результирующее отношение R будет означать всех производителей из Лондона, выпускающих деталь Р1. Тело отношения R состоит из единственного элемента (S1, Сергей, 20, Москва).
П# | Имя | статус | Город_п |
S1 | Сергей | 20 | Москва |
Произведениеотношения R1 степени к1 и отношения R2 степени к2 (RlTIMESR2), которые не имеют одинаковых имен атрибутов, есть такое отношение R степени (к1+к2), заголовок которого представляет сцепление заголовков отношений R1 и R2, а тело — имеет кортежи, такие, что первые к1 элементов кортежей принадлежат множеству R1, а последние к2 элементов — множеству R2. При необходимости получить произведение двух отношений, имеющих одинаковые имена одного или нескольких атрибутов, применяется операция переименования RENAME, рассматриваемая далее.
В теории множеств результатом операции прямого произведения является множество, каждый элемент которого является парой элементов, первый из которых принадлежит R1, а второй — принадлежит R2. Поэтому кортежами декартова произведения бинарных отношений будут кортежи вида: ((а, б), (в, г)), где кортеж (а, б) принадлежит отношению R1, а кортеж (в, г) — принадлежит отношению R2.
Пример 2.
Пусть отношение R1 представляет собой множество номеров всех текущих поставщиков {SI, S2}, а отношение R2 — множество номеров всех текущих деталей {Р1, Р2 }. Результатом операции R1 TIMESR2 является множество всех пар типа «поставщик — деталь», т. е. {(S1.P1), (S1.P2), (S2.P1), (S2.P2)}.
Отношение R1
П# | Имя | Город_п |
S1 | Сергей | Москва |
S2 | Николай | Москва |
Отношение R2
Р# | название | тип |
P1 | Гайка | Каленый |
P2 | Угол | Твердый |
Дата добавления: 2018-04-04; просмотров: 486; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!