Лабораторная работа №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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!