Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задания ,методические указания к лабораторным работам.doc
Скачиваний:
39
Добавлен:
26.03.2016
Размер:
1.06 Mб
Скачать

Запросы на создание и использование базы данных

Создать базу данных, при условии наличия необходимых прав, можно следующим образом:

mysql> CREATE DATABASE your_base;

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

mysql> USE your_base

Database changed

Создавать базу нужно только однажды, но выбирать ее приходится в каждом сеансе работы с mysql. Делать это можно с помощью команды USE, представленной выше. А можно выбирать базу и из командной строки при запуске mysql. Для этого достаточно лишь ввести ее имя после параметров соединения, которые нужно вводить в любом случае. Например:

shell> mysql -h host -u user -p your_base

Enter password: ********

Обратите внимание: в вышеприведенной команде your_base не является паролем. Ввести пароль в командной строке после параметра -p можно без пробела (например, -pmypassword, а не -p mypassword). Впрочем, пароль в командной строке все равно лучше не вводить, так как таким образом его могут и подсмотреть.

Эти операции, также как и другие, описанные в этом руководстве, доступны для использования в программе MySQL-Front(см. рис. 15).

Рис. 15. Создание БД в среде MySQL-front

После задания активной БД можно с помощью средств, предоставляемых программой, изменять структуру БД, вводить данные, задавать ключевые поля. Помимо этого можно в специально отведенном окне напрямую вводить инструкции, используя синтаксис языка SQL, как показано на рис. 16:

Рис. 16. Использование синтаксиса SQL

Будем исходить из того, что стоит задача реализовать базу данных поставщиков, деталей, изделий и поставок, таблицы которой описаны следующим образом (рис. 17):

Рис. 17. Концептуальная модель учебной базы данных

Структура новой таблицы определяется при помощи команды CREATE TABLE (см. Приложение С) и в нашем случае имеет вид

CREATE TABLE `j` (

`Jnum` varchar(6) NOT NULL default '',

`Jnam` varchar(20) default NULL,

`Ci` varchar(20) default NULL,

PRIMARY KEY (`Jnum`)

) TYPE=MyISAM;

CREATE TABLE `p` (

`Pnum` varchar(6) NOT NULL default '',

`Pnam` varchar(20) default NULL,

`Co` varchar(20) default NULL,

`We` int(11) default NULL,

`Ci` varchar(20) default NULL,

PRIMARY KEY (`Pnum`)

) TYPE=MyISAM;

CREATE TABLE `s` (

`Snum` varchar(6) NOT NULL default '',

`Snam` varchar(20) default NULL,

`St` int(11) default NULL,

`Ci` varchar(20) default NULL,

PRIMARY KEY (`Snum`)

) TYPE=MyISAM;

CREATE TABLE `spj` (

`Snum` varchar(6) NOT NULL default '',

`Pnum` varchar(6) NOT NULL default '',

`Jnum` varchar(6) NOT NULL default '',

`Qt` int(11) default NULL,

PRIMARY KEY (`Snum`,`Pnum`,`Jnum`)

) TYPE=MyISAM;

Создав таблицу, нужно позаботиться об ее заполнении. Для этого предназначены команды LOAD DATA и INSERT.

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

Создайте текстовый файл с именем `data.txt', содержащий по одной записи в каждой строке (значения столбцов должны быть разделены символами табуляции и даны в том порядке, который был определен командой CREATE TABLE). Незаполненным полям (например, неизвестный статус или город) можно присвоить значение NULL. В текстовом файле это значение представляется символами \N.

Загрузить файл `data.txt' в таблицу можно с помощью следующей команды:

mysql> LOAD DATA LOCAL INFILE "data.txt" INTO TABLE S;

В результате получим заполненную таблицу.

Snum

Snam

St

Ci

S1

Smit

20

Лондон

Маркер конца строки и символ, разделяющий значения столбцов, можно специально задать в команде LOAD DATA, но по умолчанию используются символы табуляции и перевода строки. Воспринимая их, команда сможет корректно прочитать файл `data.txt'.

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

mysql>insert into J (Jnum, Jnam, Ci) values ('J1','Жесткий диск','Париж');

или

mysql>insert into J values ('J1','Жесткий диск','Париж');

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

Обратите внимание на то, что здесь строковые выражения и даты представлены в виде ограниченных кавычками строк. Кроме того, в команде INSERT отсутствующие данные можно прямо заменять на NULL. Пользоваться эвфемизмом \N, как в команде LOAD DATA, нужды нет.

Этот пример наглядно показывает, что если бы с самого начала все данные вносились в базу при помощи нескольких команд INSERT, а не одной команды LOAD DATA, то набирать пришлось бы гораздо больше текста.

Общие инструкции для использования этих операторов приведены ниже.

INSERT INTO

Вставляет данные в таблицу

Синтаксис:

INSERT INTO table [(column_name, ...)] VALUES (expression,...) ||

INSERT INTO table [(column_name, ...)] SELECT ...

LOAD DATA INFILE

Команды для чтения данных из текстового файла

Синтаксис:

LOAD DATA INFILE syntax

Пример:

LOAD DATA INFILE Customer.tab' INTO TABLE Customer

Для записи в текстовый файл используйте

SELECT ... INTO OUTFILE 'customer.tab' fields terminated by

',' enclosed by '"' escaped by '\\' lines terminated by '\n' .

“fields terminated by”

Имеет значение по умолчанию \t

“fields [optionally] enclosed by”

Имеет значение по умолчанию "

“fields escaped by”

Имеет значение по умолчанию '\\'

“lines terminated by”

Имеет значение по умолчанию '\n'

“fieldsterminatedby” и “linesterminatedby” могут быть больше чем одним символом.

Если “fields terminated by” и “fields enclosed by” являются пустыми строками, то размер строки будет фиксированным, т.е. будет производиться чтение полей одной длины.

С фиксированными значениями NULL для размера строки будут выводиться пустые строки.

Если указаны “optionally” в “enclosed by” и Вы не используете фиксированный размер строк, только строки с этим символом будут включены в команду SELECT ... INTO.

Если “escaped by” не пусто, то следующие символы будут снабжены префиксом “escaped by”, ASCII 0 и первым символом из “fields terminated by”, “fields enclosed by” и “lines terminated by”.

Если использован REPLACE, новая строка заменит все строки, которые имеют тот же самый уникальный ключ. Если использован IGNORE, строки будут пропущены, если там уже существует запись с идентичным уникальным ключом. Если ни один из вышеупомянутых параметров не используется, будет выдана ошибка, и остальная часть textfile будет игнорироваться, если найден дублирующий ключ.

Некоторые ситуации, которые не поддерживаются LOAD DATA INFILE:

Фиксированные размеры строк (“FIELDS TERMINATED BY” и “FIELDS ENCLOSED BY” являются пустыми) и поля BLOB.

Разделитель, являющийся префиксом другого разделителя.

“FIELDS ESCAPED BY” пустое и данные содержат один или несколько разделителей.

Все строки читаются в таблицу. Если строка имеет слишком мало полей, остальная часть полей в таблице устанавливается в значения по умолчанию.

По соображениям безопасности textfile должен находиться в каталоге баз данных или быть читаемым всеми.

Если “FIELDS ENCLOSED BY” не пустое, то NULL читается как значение NULL. Если “FIELDS ESCAPED” не пустое, то \N тоже читается как значение NULL. Когда запрос LOAD DATA выполнен, Вы можете получить следующую строку информации, используя функцию C API mysql_info():

@result{Records: 1Deleted: 0Skiped: 0Warnings: 0}

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

Вы должны иметь права доступа select и insert в таблице user для использования этой команды. После выбора способа заполнения необходимо воспользоваться операторами языка для достижения необходимого содержания таблиц базы данных. В нашем случае предполагается получить следующее содержание:

Таблица поставщиков (S)

Hомеp_поставщика

Фамилия

Рейтинг

Гоpод

S1

Смит

20

Лондон

S2

Джонс

10

Париж

S3

Блейк

30

Париж

S4

Кларк

20

Лондон

S5

Адамс

30

Афины

Таблица деталей (P)

Номер детали

Название

Цвет

Вес

Гоpод

P1

Гайка

Красный

12

Лондон

P2

Болт

Зеленый

17

Париж

P3

Винт

Голубой

17

Рим

P4

Винт

Красный

14

Лондон

P5

Кулачок

Голубой

12

Париж

P6

Блюм

Красный

19

Лондон

Таблица поставок (SPJ)

Номер поставщика

Номер детали

Дата поставки

Количество

S1

P1

02/01/95

300

S1

P2

04/05/95

200

S1

P3

05/12/95

400

S1

P4

06/15/95

200

S1

P5

07/22/95

100

S1

P6

08/13/95

100

S2

P1

03/03/95

300

S2

P2

06/12/95

400

S3

P2

04/04/95

200

S4

P2

03/23/95

200

S4

P4

06/17/95

300

S4

P5

08/22/95

400

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

После того как таблицы БД созданы и наполнены данными, необходимо создать запросы согласно исходному заданию (см. Приложение A).