Роздрукувати сторінку
Главная \ Методичні вказівки \ Методичні вказівки \ 1517 Лабораторная работа 4 на тему Работа с MySQL

Лабораторная работа 4 на тему Работа с MySQL

« Назад

Лабораторная работа №4

Работа с MySQL

Управление сервером обычно осуществляется из командной строки. В Windows  откройте сеанс DOS и выполните следующие команды:

cd mysql\bin
mysql\bin>mysqld --standalone

Эта команда запустит  mysql в фоновом режиме. При запуске mysqld можно указывать следующие опции:

-\?, --help

Справка

-b, --basedir=[path]

Путь к каталогу в котором установлен mysql

-h, --datadir [homedir]

Путь к каталогу,в котором хранятся базы данных.

-l, --log=[filename]

Имя журнала транзакций

-L, --language=[language]

Язык по умолчанию (обычно English).

-P, --port=[port]

Порт для соединения.

--skip-grant-tables

Игнорировать таблицы привилегий. Это дает любому ПОЛНЫЙ доступ ко всем таблицам. Не следует предоставлять обычным пользователям разрешений на запуск mysqld.

--skip-name-resolve

Позволяет предоставлять доступ только тем хостам,чьи IP-адреса указаны в таблицах привилегий. Ипользуется для более высокого уровня защиты.

--skip-networking

Использовать подключения только через интерфейс localhost.

-V, --version

Вывести информацию о версии.

Теперь можно попытаться войти в сервер. Для этого используется команда mysql. Изначально существует единственный пользователь, которому предоставляется право входа-root, которая не имеет пароля. Первое,что нужно сделать-войти под именем root и установить для него пароль. Команда mysql может использовать следующие опции:

-\?,--help

Справка

-h,--hostname=[hostname]

Имя сервера mysql.

-u,--user=[user]

Имя пользователя для доступа к mysql.

-p,--password=[password]

Пароль пользователя для доступа к mysql.

-P,--port=[port]

Порт для соединения с сервером.

-V,--version

Информация о версии

 
\mysql\bin>mysql -u root mysql 
Welcome to the MySQL monitor.Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.23.19
 
Type 'help' for help.
 
mysql>

Если вы это получили, значит вы успешно вошли в базу данных mysql, которая используется для администрирования сервера. В ней содержатся 5 таблиц, называемых таблицами привилегий.

 

Система привилегий и безопасность в MySQL. 

База данных mysql и таблицы привилегий 

Итак, вы успешно вошли в базу данных mysql, которая используется для администрирования сервера.  Что же здесь находится? А находятся здесь 5 таблиц, которые ничем не отличаются от других таблиц баз данных, за исключением того, что эти таблицы используются для предоставления доступа к базам данных и таблицам в них пользователям. Рассмотрим каждую из них.

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

mysql>show tables;

Кратко рассмотрим функции каждой из таблиц:

  • User
    Определяет, разрешено ли пользователю, пытающемуся подключиться к серверу делать это. Содержит имя пользователя, пароль а также привилегии. Если ввести команду show columns from user;, то получим следующее:

Field

Type

Null

Key

Default

Extra

Host

char(60)

 

PRI

 

 

User

char(16)

 

PRI

 

 

Password

char(8)

 

 

 

 

Select_priv

char(1)

 

 

N

 

Insert_priv

char(1)

 

 

N

 

Update_priv

char(1)

 

 

N

 

Delete_priv

char(1)

 

 

N

 

Create_priv

char(1)

 

 

N

 

Drop_priv

char(1)

 

 

N

 

Reload_priv

char(1)

 

 

N

 

Shutdown_priv

char(1)

 

 

N

 

Process_priv

char(1)

 

 

N

 

File_priv

char(1)

 

 

N

 

  • Изначально эта таблица содержит пользователя root с паролем, который вы установили и именем хоста '%'. По умолчанию root может входить с любого хоста, имеет все привилегии и доступ ко всем базам данных. Также в таблице содержится запись для пользователя '%',которую нужно сразу же удалить, так как она предоставляет доступ любому пользователю.

  • Для добавления нового пользователя выполните следующие действия:

Пояснения:

1. Команда insert вставляет данные в таблицу, не забывайте завершать команды ';'.

2. При вводе пароля используйте функцию password(),иначе пароль работать не будет!

3. Все пароли шифруются mysql, поэтому в поле Password вы видите абракадабру. Это делается в целях безопасности.

4. Назначать привилегии пользователям в таблице user не является хорошей практикой, так как в этом случае они являются глобальными и распространяются на все базы данных. Предоставляйте привилегии каждому пользователю к конкретной базе данных в таблице db, которая будет рассмотрена далее.

5. При задании имени хоста для входа через сеть рекомендуется явно указывать полное имя хоста, а не '%'.В приведенном выше примере юзеру john разрешается вход на сервер со всех машин домена domain.com. Можно также указывать IP-адреса машин и маски подсетей для большей безопасности.

  • Db
    Определяет к каким базам данных каким пользователям и с каких хостов разрешен доступ. В этой таблице можно предоставлять каждому пользователю доступ к базам данных и назначать привилегии. Eсли выполнить команду show columns from db; получим следующее:

Field

Type

Null

 

Default

Extra

Host

char(60)

 

PRI

 

 

Db

char(32)

 

PRI

 

 

User

char(16)

 

PRI

 

 

Select_priv

char(1)

 

 

N

 

Insert_priv

char(1)

 

 

N

 

Update_priv

char(1)

 

 

N

 

Delete_priv

char(1)

 

 

N

 

Create_priv

char(1)

 

 

N

 

Drop_priv

char(1)

 

 

N

 

По умолчанию, все привилегии установлены в 'N'. Например, предоставим юзеру john доступ к базе данных library и дадим ему привилегии select, insert и update (описание основных команд mysql будет дано в отдельном разделе, сейчас цель – показать, как работают таблицы привилегий).

Привилегии,устанавливаемые в таблице db,распространяются только на базу данных library. Если же установить эти привилегии в таблице user, то они будут распространяться и на другие базы данных, даже если доступ к ним и не установлен явно.

  • Host

Таблица host используется для расширения диапазона доступа в таблице db. К примеру, если доступ к какой-либо базе данных должен быть предоставлен более чем одному хосту, тогда следует оставить пустой колонку host в таблице db, и внести в таблицу host необходимые имена хостов. Выполним команду show columns from host;

Field

Type

Null

Key

Default

Extra

Host

char(60)

 

PRI

 

 

Db

char(32)

 

PRI

 

 

Select_priv

char(1)

 

 

N

 

Insert_priv

char(1)

 

 

N

 

Update_priv

char(1)

 

 

N

 

Delete_priv

char(1)

 

 

N

 

Create_priv

char(1)

 

 

N

 

Drop_priv

char(1)

 

 

N

 

Как видно из таблицы, здесь также можно задавать привилегии для доступа к базе данных. Они обычно редко используются без необходимости. Все привилегии доступа нужно задавать в таблице db для каждого пользователя, а в таблице host только перечислить имена хостов. Сервер читает все таблицы, проверяет имя пользователя, пароль, имя хоста, имя базы данных, привилегии. Если в таблице db привилегии select, insert установлены в 'Y', а в таблице host в 'N', то в итоге юзер все равно получит 'Y'. Чтобы не вносить путаницы, лучше назначать привилегии в таблице db.

Эти 3 таблицы являются основными. В новых версиях MySQL, начиная с 3.22 добавлены еще 2 таблицы- tables_priv и columns_priv, которые позволяют задать права доступа к определенной таблице в базе данных и даже к определенной колонке. Они работают подобно таблице db, только ссылаются на таблицы и колонки. Также, начиная с версии 3.22 можно использовать команду GRANT для предоставления доступа к базам данных, таблицам и колонкам таблиц, что избавляет от необходимости вручную модифицировать таблицы db, tables_priv и columns_priv. Команда GRANT будет подробно рассмотрена в следующих разделах.

Привилегии,предоставляемые MySQL

Привилегия

Колонка

Где используется

select

Select_priv

таблицы

insert

Insert_priv

таблицы

update

Update_priv

таблицы

delete

Delete_priv

таблицы

index

Index_priv

таблицы

alter

Alter_priv

таблицы

create

Create_priv

БД,таблицы,индексы

drop

Drop_priv

БД или таблицы

grant

Grant_priv

БД или таблицы

references

References_priv

БД или таблицы

reload

Reload_priv

администрирование сервера

shutdown

Shutdown_priv

администрирование сервера

process

Process_priv

администрирование сервера

file

File_priv

доступ к файлам на сервере

Select-используется для извлечения информации из таблиц. Select можно также использовать не имея разрешения на доступ к какой-либо БД, например, как калькулятор.

mysql>select 4+3;

Сервер выдаст результат. Пример использования Select:

Insert-используется для вставки информации в таблицу. Например:

Update-позволяет обновлять информацию в таблицах.Например:

Delete-используется для удаления информации из таблиц.

mysql>delete from indexes where u_id='2201';

Alter-используется для модификации таблиц: переименования таблицы, добавления колонок, изменения колонок, удаления колонок. Примеры:

mysql>alter table wind rename newwind;
mysql>alter table newwind add master_con varchar(20);
mysql>alter table newwind change retail wholesale varchar(60);
mysql>alter table newwind drop field021;

Create-позволяет создавать базы данных и таблицы в них.Примеры:

mysql>mysqladmin -u john -ptest create mydb //Создает пустую БД.
mysql>use mydb;
Database changed.
create table monitoring (
id int(5) not null auto_increment,
first_name varchar(15) not null,
last_name varchar(20) not null,
address varchar(80) not null,
primary key (id),
key(last_name));

Drop-ипользуется для удаления таблиц и баз данных.

Grant-позволяет пользователю предоставлять другим пользователям привилегии, которыми он сам обладает. Два пользователя с различными привилегиями и привилегий GRANT могут комбинировать свои разрешения.

File-пользователь, обладающий этим правом, может выполнять команды LOAD DATA INFILE и SELECT...INTO OUTFILE и может читать и записывать любой файл на сервере MySQL.

Последние 3 привилегии используются для администрирования сервера из команды mysqladmin.

Привилегия

Разрешенные команды

reload

reload, refresh, flush-privileges, flush-hosts, flush-logs, flush-tables

shutdown

shutdown

process

processlist, kill

Создание и модификация баз данных и таблиц в MySQL.

 

Создание баз данных 

Создание базы данных в MySQL производится с помощью утилиты mysqladmin. Изначально существует только БД mysql для администратора и БД test, в которую может войти любой пользователь и которая по умолчанию пуста. Приведенный ниже пример иллюстрирует создание базы данных.

 
mysql\bin>mysqladmin -u root -p create data1
Enter password:******
 
Database "data1" created.
 
mysql\bin>

По умолчанию, root имеет доступ ко всем базам данных и таблицам. Перейти в созданную базу данных можно, используя команду mysql.

 
mysql\bin>mysql -u root -p data1
Enter password:******
 
Welcome to MySQL monitor.

Или, находясь в другой базе данных, например в mysql ввести команду:

mysql>use data1
Database changed.

Теперь можно создавать таблицы и вводить информацию.

Типы данных в MySQL

Прежде чем создавать таблицы, необходимо ознакомиться с тем, какие типы данных поддерживает MySQL. Все они представлены в нижеследующей таблице:

BIGINT [(length)] [UNSIGNED] [ZEROFILL]

8 байт целое

BLOB

Двоичный объект (максимальная длина 65535 байт)

CHAR(NUM)

Строка фиксированной длины (1 <= NUM <= 255)

DATE

Сохраняет информацию о дате. Использует формат "YYYY-MM-DD". Может модифицироваться как строка или число. YYYY-MM-DD ('- ' может быть ЛЮБОЙ не цифрой) YY-MM-DD ('- ' может бытьЛЮБОЙ не цифрой) YYMMDD YYMM Диапазон для этого типа данных от 0000-00-00 до 9999-12-31. В отличие от TIMESTAMP, DATE принимает годы и в виде двух цифр от 0000 до 0099. Это не очень полезно в большинстве случаев. Используйте задание лет четырьмя цифрами в полях типа DATE. Тип DATE имеет длину 4 байта.

DATETIME

Объединение типов DATE и TIME. Тип DATETIME идентичен типу TIMESTAMP со следующими исключениями: Когда запись вставляется в таблицу, содержащую поля типа DATETIME, поле DATETIME не изменяется. Диапазон для поля типа DATETIME: '0000-01-01 00:00:00' - '9999-12-31 23:59:59' при использовании в контексте строки, и '00000000000000' - '99991231235959' при использовании в контексте числа. Тип DATETIME имеет длину 8 байт.

DECIMAL (length,dec)

Десятичное число с плавающей запятой.

DOUBLE [(length,dec)]

Число (4 или 8 байт) двойной точности с максимальной длиной и фиксированном числом десятичных чисел.

FLOAT [(precision)]

Номер с плавающей запятой. FLOAT(4) и FLOAT одиночная точность. FLOAT(8) обеспечивает двойную точность.

FLOAT [(length,decimals)]

Число одиночной точности с максимальной длиной и фиксированном числом десятичных чисел (4 байта).

INT [(length)] [UNSIGNED] [ZEROFILL]

Целое (4 байта).

INTEGER [(length)] [UNSIGNED] [ZEROFILL]

Целое число 4 байта

LONGBLOB

Двоичный объект с максимальной длиной 2**32 байт.

MEDIUMBLOB

Двоичный объект с максимальной длиной 16777216 байт.

MEDIUMINT [(length)] [UNSIGNED] [ZEROFILL]

Целое (3 байта).

REAL [(length,dec)]

Идентично DOUBLE (8 байт).

SMALLINT [(length)] [UNSIGNED] [ZEROFILL]

Целое (2 байта).

TINYBLOB

Двоичный объект с максимальной длиной 255 байт.

TINYINT [(length)] [UNSIGNED] [ZEROFILL]

Целое число (1 байт).

VARCHAR(NUM)

Строка переменной длины (1 <= NUM <= 255)

TIME

Хранит информацию о времени. Использует формат "HH:MM:SS". Может использоваться как строка или число. MySQL тип TIME понимает следующий синтаксис. HH:MM:DD HHMMDD HHMM HH Данные типа TIME имеют длину 3 байта.

 

Создание и модификация таблиц

Cоздадим таблицу customers в БД data1:

 
mysql>use data1 
Database changed.
mysql>create table customers (
emp_id int(4) not null auto_increment,
emp_name varchar(10) not null,
emp_lname varchar(15) not null,
address varchar(60) not null,
phone int(10),
primary key(emp_id));

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

а)вручную, используя команду insert into;

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

в)использовать утилиту mysqlimport также для загрузки данных из текстового файла.

Пример ввода данных вручную:

Что касается auto_increment в столбце emp_id, это означает, что числовое значение этого столбца будет автоматически увеличиваться на единицу с каждой новой записью. То есть, если мы ввели значение 1001, то следующее будет 1002 и т.д. Значение в такой столбец вводится один раз для задания точки отсчета, а дальше сервер будет сам подставлять нужные значения.

Синтаксис команды LOAD DATA INFILE

DATA [LOW_PRIORITY] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY '\t']
[OPTIONALLY] ENCLOSED BY '']
[ESCAPED BY '\\' ]]
[LINES TERMINATED BY '\n']
[IGNORE number LINES]
[(col_name,...)]

Предположим, существует некоторый текстовый файл 123.txt, содержащий 2000 записей, которые нужно внести в таблицу. Нужно создать таблицу, имеющую такую же структуру и такое же число полей,  как и файл (а также подходящие типы данных). Предположим, что поля в файле разделены запятыми. Кроме того, файл должен находиться в нужной базе данных. Вводим следующую команду:

LOAD DATA INFILE '123.txt' into table customers fields terminated by ',';

Это все. Данные из файла помещаются в таблицу.

Для модификации таблиц и данных в них используются команды update и alter table. Рассмотрим их действие на примере таблицы customers:

Customers

emp_id

emp_name

emp_lname

address

phone

1001

John

Walker

New York

1235468798

1002

Bill

Smith

Chicago

7650945237

1003

Jack

Nicolson

Dallas

9874325097

 

Пример действия команды alter table:

После выполнения этих команд таблица примет следующий вид:

Buyers

emp_id

emp_name

emp_lname

address

telephone

last_accessed

1001

John

Walker

New York

1235468798

 

1002

Bill

Smith

Chicago

7650945237

 

1003

Jack

Nicolson

Dallas

9874325097

20000512

 

Изменение данных в таблицах производится с помощью команды update. Для примера возьмем ту же таблицу buyers.

Для модификации таблиц используются также команды Drop и Delete.

Delete-удаляет строку из таблицы. Например, если ввести команду
delete from buyers where emp_id='1002' будет удалена строка для Bill Smith.

Drop-если используется в Alter table  удаляет колонку из таблицы.

Команда Drop также используется для удаления таблиц и баз данных. Пользоваться ею следует осторожно, так как любое удаление необратимо, восстановить данные можно только из резервной копии.

 

Запросы к базе данных и команда Select 

Команда Select заслуживает того,чтобы посвятить ей отдельную главу. Команда Select используется для запросов к базе данных с целью извлечения из нее информации. Синтаксис команды следующий:

SELECT [STRAIGHT_JOIN] [DISTINCT | ALL] select_expression,...
[FROM tables... [WHERE where_definition] [GROUP BY column,...]
[ORDER BY column [ASC | DESC], ...] HAVING full_where_definition
[LIMIT [offset,] rows] [PROCEDURE procedure_name]]
[INTO OUTFILE 'file_name'... ]

Как видно из вышеприведенного, вместе с командой Select используются ключевые слова, использование которых очень влияет на ответ сервера. Рассмотрим каждое из них.

  • DISTINCT..

Пропускает строки,в которых все выбранные поля идентичны, то есть устраняет дублирование данных.

  • WHERE.

Предложение команды Select, которое позволяет устанавливать предикаты, условие которых может быть верным или неверным для любой строки таблицы. Извлекаются только те строки, для которых такое утверждение верно. Например:

SELECT u_id, lname from publishers WHERE city ='New York';

Выводит колонки u_id и lname из таблицы publishers для которых значение в столбце city-New York. Это дает возможность сделать запрос более конкретным.

  • Реляционные операторы.

Реляционный оператор - математический символ который указывает на определенный тип сравнения между двумя значениями. Реляционные операторы которыми располагает MySQL :

=      Равнo  
>      Больше 
<      Меньше   
>=    Больше или равно             
<=    Меньше или равно  
< >   Не равно

Эти операторы имеют стандартные значения для числовых значений.

Предположим что вы хотите увидеть всех заказчиков с оценкой(rating) выше 200. Так как 200 - это скалярное значение, как и значение в столбце оценки, для их сравнения вы можете использовать реляционный оператор.

SELECT * FROM Customers WHERE rating > 200;

  • Булевы операторы.

Основные Булевы операторы также распознаются в MySQL. Выражения Буля - являются или верными или неверными, подобно предикатам. Булевы операторы связывают одно или более верных/неверных значений и производят единственное верное или неверное значение. Стандартными операторами Буля распознаваемыми в SQL являются: AND, OR и NOT.

Предположим вы хотите видеть всех заказчиков в Далласе, которые имеют рейтинг выше 200:

SELECT * FROM Customers WHERE city = 'Dallas' AND rating > 200;

При использовании оператора AND, должны быть выполнены оба условия, то есть должны быть выбраны все заказчики из Далласа, рейтинг которых больше 200.

При использовании оператора OR, должно выполниться одно из условий. Например:

SELECT * FROM Customers WHERE city = 'Dallas ' OR rating > 200;

В данном случае будут выбраны все заказчики из Далласа и все имеющие рейтинг больше 200,даже если они и не из Далласа.

NOT может использоваться для инвертирования значений Буля. Пример запроса с NOT:

SELECT * FROM Customers WHERE city = 'Dallas' OR NOT rating > 200;

При таком запросе будут выбраны все заказчики из Далласа и все заказчики, рейтинг которых меньше 200.В этом запросе оператор NOT применяется только к выражению rating >200.Можно сделать более сложный запрос:

SELECT * FROM Customers WHERE NOT( city = 'Dallas' OR rating > 200 );

В этом запросе NOT применен к обеим выражениям в скобках. В данном случае, сервер читает выражения в скобках, определяет, соответствует ли истине равенство city = 'Dallas' или равенство rating > 200.Если любое условие верно, выражение Буля внутри круглых скобок верно. Однако, если выражение Буля внутри круглых скобок верно,предикат как единое целое неверен, потому что NOT преобразует верно в неверно и наоборот.То есть,будут выбраны все заказчики не находящиеся в Далласе и рейтинг которых меньше 200.

  • IN.

Оператор IN определяет набор значений в которое данное значение может или не может быть включено.Например,запрос

SELECT * FROM Salespeople WHERE city = 'Barcelona' OR city = 'London';

может быть переписан более просто:

SELECT * FROM Salespeople WHERE city IN ( 'Barcelona', 'London' );

IN определяет набор значений с помощью имен членов набора заключенных в круглые скобки и отделенных запятыми.Затем он проверяет различные значения указанного,пытаясь найти совпадение со значениями из набора. Если это случается, то предикат верен. Когда набор содержит значения номеров а не символов, одиночные кавычки опускаются.

  • BETWEEN.

Оператор BETWEEN похож на оператор IN. В отличии от определения по номерам из набора, как это делает IN, BETWEEN определяет диапазон, значения которого должны уменьшаться что делает предикат верным. Вы должны ввести ключевое слово BETWEEN с начальным значением, ключевое AND и конечное значение. В отличие от IN, BETWEEN чувствителен к порядку, и первое значение в предложении должно быть первым по алфавитному или числовому порядку.Например:

SELECT * FROM Salespeople WHERE comm BETWEEN .10 AND .12;
SELECT * FROM Salespeople WHERE city BETWEEN 'Berlin' AND 'London';

  • LIKE.

LIKE применим только к полям типа CHAR или VARCHAR, с которыми он используется чтобы находить подстроки. Т.е. он ищет поле символа чтобы видеть, совпадает ли с условием часть его строки.В качестве условия он использует групповые символы(wildkards) - специальные символы которые могут соответствовать чему-нибудь. Имеются два типа групповых символов используемых с LIKE:

  • символ подчеркивания ( _ ) замещает любой одиночный символ.

  • знак '%',замещающий любое количество символов.

Если мы зададим следующие условия:

SELECT * FROM Customers WHERE fname LIKE 'J%';

то будут выбраны все заказчики,чьи имена начинаются на J:John,Jerry,James и т.д.

  • COUNT.

Агрегатная функция,производит подсчет значений в столбце или числа строк в таблице.При работе со столбцом использует DISTINCT в качестве аргумента:

SELECT COUNT ( DISTINCT snum ) FROM Orders;

При подсчете строк имеет синтаксис:

SELECT COUNT (*)  FROM Customers;
  • GROUP BY.

Предложение GROUP BY позволяет определять подмножество значений в особом поле в терминах другого поля, и применять функцию агрегата к подмножеству. Это дает возможность объединять поля и агрегатные функции в едином предложении SELECT. Например, предположим что вы хотите найти наибольшую сумму приобретений полученную каждым продавцом. Вы можете сделать раздельный запрос для каждого из них, выбрав MAX () из таблицы для каждого значения поля. GROUP BY позволит Вам поместить их все в одну команду:

SELECT snum, MAX (amt) FROM Orders GROUP BY snum; 
  • HAVING.

HAVING определяет критерии используемые чтобы удалять определенные группы из вывода, точно также как предложение WHERE делает это для индивидуальных строк.Например:

SELECT cid,cname,price,max(price)  //max()-это тоже агрегатная функция
FROM customers HAVING max(price)>500;

HAVING действует сходно с WHERE,но с WHERE нельзя использовать агрегатные функции.

  • ORDER BY.

Эта команда упорядочивает вывод запроса согласно значениям в том или ином количестве выбранных столбцов. Многочисленные столбцы упорядочиваются один внутри другого,также как с GROUP BY.

  • EXISTS.

Используется в подзапросах.

SELECT cnum, cname, city FROM Customers WHERE EXISTS 
(SELECT * FROM Customers WHERE city = " San Jose' ); 

Он берет подзапрос как аргумент и оценивает его как верный если тот производит любой вывод или как неверный если тот не делает этого.Этим он отличается от других операторов предиката, в которых он не может быть неизвестным. Например, мы можем решить, извлекать ли нам некоторые данные из таблицы Заказчиков если, и только если, один или более заказчиков в этой таблице находятся в San Jose.

  • UNION.

UNION отличается от подзапросов тем что в нем ни один из двух ( или больше ) запросов не управляются другим запросом. Все запросы выполняются независимо друг от друга, а уже вывод их - объединяется.Например:

SELECT snum, sname FROM Salespeople WHERE city = 'London' UNION  
SELECT cnum, cname  FROM Customers 
WHERE city = 'London';  

Предложение UNION объединяет вывод двух или более SQL запросов в единый набор строк и столбцов.

  • DESC,ASC.

DESC-DESCEDENT,вывод данных в обратном порядке(по алфавиту и численным значениям).По умолчанию используется ASC.

Ну вот вкратце и все.MySQL поддерживает почти все основные команды SQL Server,так что более подробно о команде SELECT вы можете прочитать в любом учебнике по языку SQL.

2.4.2. Задание к лабораторной работе № 4

Создадим базу данных, для этого входим в MySQL, и выполняем команды:

>CREATE DATABASE products;

>CREATE TABLE clients (name VARCHAR(25), email VARCHAR(25), choise VARCHAR(8));

Для общения с MySQL из PHP понадобятся следующие функции.

int mysql_connect(string hostname, string username, string password);

Создать соединение с MySQL.

Параметры:

Hostname – имя хоста, на котором находится база данных.

Username – имя пользователя.

Password – пароль пользователя.

Функция возвращает параметр типа int, который больше 0, если соединение прошло успешно, и равен 0 в противном случае.

int mysql_select_db(string database_name, int link_identifier);

Выбрать базу данных для работы.

Параметры:

Database_name – имя базы данных.

link_identifier – ID соединения, которое получено в функции mysql_connect. (параметр необязательный, если он не указывается, то используется ID от последнего вызова mysql_connect)

Функция возвращает значение true или false

int mysql_query(string query, int link_identifier);

Функция выполняет запрос к базе данных.

Параметры:

Query – строка, содержащая запрос

link_identifier – см. предыдущую функцию.

Функция возвращает ID результата или 0, если произошла ошибка.

int mysql_close(int link_identifier);

Функция закрывает соединение с MySQL.

Параметры:

link_identifier – см. выше.

Функция возвращает значение true или false

Теперь наш файл email.php3 будет иметь след. вид:

<?
/* Этот скрипт получает переменные из request.html */

/* Некоторые переменные */

$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";

/* Таблица MySQL, в которой хранятся данные */
$userstable = "clients";

/* email администратора */
$adminaddress = "administration@me.com";

/* создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");

@mysql_select_db("$dbName") or die("Не могу выбрать базу данных ");

PRINT "<CENTER>";
PRINT "Привет, $name.";
PRINT "<BR><BR>";
PRINT "Спасибо за ваш интерес.<BR><BR>";
PRINT "Вас интересуют $preference. Информацию о них мы пошлем вам на email: $email.";
PRINT "</CENTER>";

/* Отправляем email */
mail($email, "Запрос на информацию", "$namen\n
Спасибо за ваш интерес!\n
Вас интересуют $preference\n
Мы их распространяем бесплатно. Обратитесь в ближайший филиал нашей компании и получите ящик этого продукта.\n
");

mail("administration@me.com",
"Был запрос на информацию.",
"$name интересовали $preference\n
email-адрес: $email. \n");

/* Вставить информацию о клиенте в таблицу */
$query = "INSERT INTO $userstable VALUES('$name','$email', '$preference')";

$result = MYSQL_QUERY($query);

PRINT "Информация о вас занесена в базу данных.";

/* Закрыть соединение */
MYSQL_CLOSE();
?>

Вот так легко можно работать с базой данных в PHP. Теперь кроме письменных уведомлений, информация о клиенте и его интересах будет заносится в таблицу MySQL.

Работа с MySQL (получение данных из базы данных).

После занесения данных, нас иногда будет интересовать вопрос так кого же из наших клиентов интересует товар “Яблоки” (не путать с Apple Macintosh, по поводу Apple Macintosh см. www.stealthcomp.com).

Напишем скрипт apple.php3

<?/* Скрипт показывает клиентов, которые яблоки любят больше чем апельсины */
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";

/* Таблица MySQL, в которой хранятся данные */
$userstable = "clients";

/* создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");

@mysql_select_db("$dbName") or die("Не могу выбрать базу данных ");

/* Выбрать всех клиентов - яблочников */
$query = "SELECT * FROM $userstable WHERE choice = 'Яблоки'";

$result = MYSQL_QUERY($query);

/* Как много нашлось таких */
$number = MYSQL_NUMROWS($result);

/* Напечатать всех в красивом виде*/
$i = 0;

IF ($number == 0) {
PRINT "<CENTER><P>Любителей яблок нет</CENTER>";
} ELSEIF ($number > 0) {
PRINT "<CENTER><P>Количество любителей яблок: $number<BR><BR>";
WHILE ($i < $number){
$name = mysql_result($result,$i,"name");
$email = mysql_result($result,$i,"email");
PRINT "Клиент $name любит Яблоки.<BR>";
PRINT "Его Email: $email.";
PRINT "<BR><BR>";
$i++;
}
PRINT "</CENTER>";
}
?>

Здесь мы использовали две новых функции:

int mysql_num_rows(int result);

Функция возвращает количество строк в результате запроса.

Параметр result – содержит ID результата запроса.

int mysql_result(int result, int i, column);

Функция возвращает значение поля в столбце column и в строке i.

З повагою ІЦ "KURSOVIKS"!