PHP скрипты

MySQL

Apache

phpMyADmin

2.18: Примеры общих запросов в MySQL

Главная Страница » Книги по PHP » MySQL уроки для начинающих с нуля » Примеры общих запросов

Имеются примеры того, как решить некоторые общие проблемы с MySQL. Здесь мы уже рассматриваем другую базу данных в качестве образца.

Некоторые из примеров используют таблицу shop, чтобы хранить цену каждого изделия (код элемента article) для некоторых торговцев (dealer). Предположим, что у каждого торговца установлена одна фиксированная цена на изделие, тогда пара (article, dealer) является первичным ключом для записей.

Запустите инструмент командной строки mysql и выберите базу данных:

mysql your-database-name

В большинстве инсталляций MySQL вы можете использовать имя базы данных test. Но лучше создайте какую-нибудь тестовую базу данных, как создавали ее для таблицы с животными.

Вы можете создать новую таблицу для примера так:

CREATE TABLE shop (article INT(4) UNSIGNED ZEROFILL DEFAULT "0000"
             NOT NULL, dealer CHAR(20) DEFAULT "" NOT NULL,
             price DOUBLE (16,2) DEFAULT "0.00" NOT NULL,
             PRIMARY KEY(article, dealer));
INSERT INTO shop VALUES
 (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),
 (3,'B',1.45),(3,'С',1.69),(3,'D',1.25),(4,'D',19.95);

Сколько новых слов! Давайте разбираться, что делает такой запрос. Он создает таблицу shop (CREATE TABLE shop). Далее в скобках перечисляются определения столбцов таблицы. Определения разделяются запятыми. Столбец объявляется так: имя столбца, затем его тип, далее несколько слов задают его атрибуты. Полностью перечни атрибутов и типов будут рассмотрены в последующих главах, а пока ограничимся необходимой в настоящий момент информацией.

Указанием NOT NULL мы определяем, что этот столбец не может содержать значений NULL (все значения всегда определены, неопределенности, которой и соответствует NULL, в таком столбце быть не может).

Слово DEFAULT означает, что столбец имеет значение по умолчанию, а сразу за этим словом как раз и идет то самое значение, которое по умолчанию будет присваиваться всем полям в столбце. Значение это взято в кавычки, чтобы ограничить его, иначе сервер может воспринять как значение по умолчанию всю оставшуюся строку определений.

Тип DOUBLE (16,2) обозначает дробное число с двумя цифрами после запятой (строго двумя: их количество мы фиксируем в определении!), тип CHAR(20) задает строку длиной в 20 символов, INT (4) указывает целое число из 4 цифр, параметр UNSIGNED определяет, что это число без знака (то есть, в этом столбце не может быть отрицательных значений: только 0 или больше).

Наконец длинное выражение PRIMARY KEY (article, dealer) говорит о том, что в таблице создается первичный ключ (PRIMARY KEY) и состоит он из пары столбцов article и dealer. Поскольку столбцы здесь рассматриваются только вместе (сервер их логически связывает), уместно говорить о них не как о двух разных столбцах, а именно как о паре.

Особый интерес вызывает слово ZEROFILL. Оно предписывает дописать данные в поле нулями до максимальной ширины поля. Поясняю, что это значит. Поле article определено как INT(4). То есть оно содержит число, которое состоит максимум из четырех цифр. А если полю присвоено значение, например, из одной цифры? Резонный ответ: тогда там и будет одна цифра. Но нам-то для нашего примера непременно нужны четыре! Это ведь не просто число, а код товара.

Поэтому, когда полю присваивается, скажем, значение 5, оно должно быть записано как 0005. Если присваивается значение 777, то в таблицу должно быть вписано 0777 и так далее. Безусловно, вы сами можете вводить числа, дополняя их нулями до нужной длины. Но зачем? Здесь высока вероятность ошибок.

Например, неправильно посчитали сколько нулей нужно, или ошиблись при вводе. Пусть сервер сам поработает за вас, благо такая возможность имеется.

После определения таблицы следующая команда вставляет (INSERT) данные в таблицу shop (INTO shop). При вставке данных перечисляются наборы значений (VALUES) для каждой записи в таблице. Каждый набор заключается в свой комплект круглых скобок, значения в наборе разделены запятыми, сами наборы также разделены запятыми.

Посмотрим данные примера (все ли правильно ввели):

mysql> SELECT * FROM shop;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001    | A      | 3.45  |
| 0001    | B      | 3.99  |
| 0002    | A      | 10.99 |
| 0003    | B      | 1.45  |
| 0003    | C      | 1.69  |
| 0003    | D      | 1.25  |
| 0004    | D      | 19.95 |
+---------+--------+-------+

Вот видите, в столбце article приведены строго четырехзначные коды товаров, причем, если код товара меньше четырех цифр, недостающие будут заполнены нулями автоматически при внесении информации в базу данных (причем без вашего участия). Теперь можно приступать к тренировке. Рассмотрим некоторые полезные функции языка SQL.

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