Функции - это операции, позволяющие манипулировать данными. В MySQL можно выделить несколько групп встроенных функций:
Строковые функции. Используются для управления текстовыми строками, например, для обрезания или
заполнения значений.
Числовые функции. Используются для выполнения математических операций над числовыми данными. К числовым функциям
относятся функции возвращающие абсолютные значения, синусы и косинусы углов, квадратный корень числа и т.д.
Используются они только для алгебраических, тригонометрических и геометрических вычислений. В общем, используются редко, поэтому
рассматривать их мы не будем. Но вы должны знать, что они существуют, и в случае необходимости обратиться к документации MySQL.
Итоговые функции. Используются для получения итоговых данных по таблицам, например,
когда надо просуммировать какие-либо данные без их выборки.
Функции даты и времени. Используются для управления значениями даты и времени, например, для возвращения разницы
между датами.
Системные функции. Возвращают служебную информацию СУБД.
Для того, чтобы рассмотреть основные встроенные функции нам понадобится создать новую базу данных, чтобы в ней были числовые значения и значения
даты. В уроке 5 основ баз данных мы сделали реляционную модель базы данных интернет-магазина. Пришло время
реализовать ее в MySQL, заодно закрепим пройденное.
Итак, смотрим на последнюю схему урока 5 по БД и создаем БД - shop.
create database shop;
Выбираем ее для работы:
use shop;
И создаем в ней 8 таблиц, как в схеме: Покупатели (customers), Поставщики (vendors), Покупки (sale), Поставки (incoming),
Журнал покупок (magazine_sales), Журнал поставок (magazine_incoming), Товары (products), Цены (prices). Один нюанс, наш магазин
будет торговать книгами, поэтому в таблицу Товары мы добавим еще один столбец - Автор (author), в принципе это необязательно,
но так как-то привычнее.
create table customers (
id_customer int NOT NULL AUTO_INCREMENT,
name char(50) NOT NULL,
email char(50) NOT NULL,
PRIMARY KEY (id_customer)
);
create table vendors (
id_vendor int NOT NULL AUTO_INCREMENT,
name char(50) NOT NULL,
city char(30) NOT NULL,
address char(100) NOT NULL,
PRIMARY KEY (id_vendor)
);
create table sale (
id_sale int NOT NULL AUTO_INCREMENT,
id_customer int NOT NULL,
date_sale date NOT NULL,
PRIMARY KEY (id_sale),
FOREIGN KEY (id_customer) REFERENCES customers (id_customer)
);
create table incoming (
id_incoming int NOT NULL AUTO_INCREMENT,
id_vendor int NOT NULL,
date_incoming date NOT NULL,
PRIMARY KEY (id_incoming),
FOREIGN KEY (id_vendor) REFERENCES vendors (id_vendor)
);
create table products (
id_product int NOT NULL AUTO_INCREMENT,
name char(100) NOT NULL,
author char(50) NOT NULL,
PRIMARY KEY (id_product)
);
create table prices (
id_product int NOT NULL,
date_price_changes date NOT NULL,
price double NOT NULL,
PRIMARY KEY (id_product, date_price_changes),
FOREIGN KEY (id_product) REFERENCES products (id_product)
);
create table magazine_sales (
id_sale int NOT NULL,
id_product int NOT NULL,
quantity int NOT NULL,
PRIMARY KEY (id_sale, id_product),
FOREIGN KEY (id_sale) REFERENCES sale (id_sale),
FOREIGN KEY (id_product) REFERENCES products (id_product)
);
create table magazine_incoming (
id_incoming int NOT NULL,
id_product int NOT NULL,
quantity int NOT NULL,
PRIMARY KEY (id_incoming, id_product),
FOREIGN KEY (id_incoming) REFERENCES incoming (id_incoming),
FOREIGN KEY (id_product) REFERENCES products (id_product)
);
Обратите внимание, что в таблицах Журнал покупок, Журнал поставок и Цены первичные ключи - составные, т.е. их уникальные значения
состоят из пар значений (в таблице не может быть двух строк с одинаковыми парами значений). Названия столбцов этих пар значений
и указываются через запятую после ключевого слова PRIMARY KEY. Остальное вы уже знаете.
В настоящем интернет-магазине данные в эти таблицы будут заноситься посредством сценариев на каком-либо языке (типа php), нам же
пока придется внести их вручную. Можете внести любые данные, только помните, что значения в одноименных столбцах связанных таблиц
должны совпадать. Либо скопируйте нижеприведенные данные:
Итак, в нашем магазине 24 наименования товара, привезенные в трех поставках от трех поставщиков, и совершенно три продажи.
Все готово, можем приступать к изучению встроенных функций MySQL, чем и займемся в следующем уроке.