
- •Методические указания по выполнению лабораторной работы №2
- •Оглавление
- •Введение
- •Краткий обзор различных субд
- •Проектирование бд
- •3.1 Общие сведения о sql
- •3.2 Сведения об операторах sql
- •Insert добавляет новые данные
- •3.3 Сведения о типах данных
- •Методические указания по выполнению практической части лабораторной работы
- •4.1 На что следует обратить внимание перед началом работы
- •4.2 Начало работы с MySql
- •4.3 Рассмотрим создание бд на примере бд для Интернет-продаж
- •4.3.1 Создадим новую бд
- •4.3.2 Создадим таблицу «Интернет-Магазины»
- •4.3.3 Создадим таблицу «Товары»
- •4.3.4 Создадим таблицу «Клиенты»
- •4.3.5 Создадим таблицу «Доставка»
- •4.3.6 Заполним таблицу «Интернет-Магазины»
- •4.3.7 Заполним таблицу «Товары»
- •4.3.8 Заполним таблицу «Клиенты»
- •4.3.9 Заполним таблицу «Заказы»
- •4.3.10 Заполним таблицу «Доставка»
- •4.3.11 Отобразим графически структуру созданной таблицы с помощью программного средства MySql Workbench
- •Варианты заданий для лабораторной работы на тему «Разработка базы данных в субд MySql»
- •Список литературы
4.3.5 Создадим таблицу «Доставка»
DROP TABLE IF EXISTS `Доставка` ;
CREATE TABLE IF NOT EXISTS `Доставка`
(
`Код доставки` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`Код заказа` INT UNSIGNED NOT NULL ,
`Дата и время доставки` DATETIME NULL ,
`Код клиента` INT UNSIGNED NOT NULL ,
PRIMARY KEY (`Код доставки`) ,
INDEX `FKOrder` (`Код заказа` ASC) ,
INDEX `FKClient2` (`Код клиента` ASC) , -- Важно! В системе не должно быть двух индексов с одинаковыми именами!
CONSTRAINT `FKOrder`
FOREIGN KEY (`Код заказа` )
REFERENCES `Заказы` (`Код Заказа` ),
CONSTRAINT `FKClient2`
FOREIGN KEY (`Код клиента` )
REFERENCES `Клиенты` (`Код Клиента` )
);
Как и в предыдущие разы, на всякий случай можно проверить структуру таблицы.
DESC Доставка;
*Примечание: В данном случае удобно в конце строки «;» заменить на «\G» - это преобразует результат в «вертикальную форму». Так стоит делать, если в стандартном представлении строки наползают друг на друга.
DESC Доставка \G
Теперь выполним заполнение таблиц.
4.3.6 Заполним таблицу «Интернет-Магазины»
INSERT INTO `Интернет-Магазины` (`Электронный адрес`, `Оплата доставки`) -- Указываем, какие столбцы мы собираемся заполнять. Первый столбец опустим т.к. при создании таблицы мы указали, чтобы он заполнялся автоматически.
VALUES ('lalala@mail.ru','да'),
('magazin431@gmail.com','да'),
('supershop@supershop.ru','нет'),
('goods@xxx.com','да'),
('neverwinter@nights.com','да');
Проверим правильность заполнения оператором SELECT.
SELECT * FROM `Интернет-магазины`;
4.3.7 Заполним таблицу «Товары»
INSERT INTO Товары -- Можно не указывать, какие именно столбцы будут заполняться данным запросом. В таком случае необходимо будет заполнить все столбцы. Причем, не в том порядке, в котором мы их обозначали в таблице, а в том, в каком они реально существуют в БД.
VALUES (NULL,'Чайник','Braun',1500), -- Т.к. для первого столбца мы при создании таблицы поставили автозаполнение, то при вводе значений в таблицу, данный столбец заполнять не нужно. В матрице данных отсутствие значение обозначаем NULL.*
(NULL,'Пылесос','Samsung',3500),
(NULL,'Электровеник','Yamaha',999),
(NULL,'Микроволновка','Whirlpool',5000),
(NULL,'Электротерка','Yamaha',999),
(NULL,'Кофеварка','Braun',1500),
(NULL,'Холодильник','Samsung',5800),
(NULL,'R2-D2','Sony',150000);
*NULL – это не ноль. Это отсутствие вообще, какого бы ни было значения. Важно понимать следующие моменты: NULL ≠ 0, NULL+1 = NULL.
Проверим заполнение таблицы.
SELECT * FROM Товары;
Мы видим, что колонка «Код товара» заполнилась автоматически. Если же попробовать указать уже существующий номер кода товара, например:
INSERT INTO Товары
VALUES (5,'Золотой Самовар','Braun',800000);
Получим следующую ошибку:
Повторение «5» для первичного ключа. А первичный ключ по определению должен быть уникальным. Программа не позволяет нарушить это правило.
4.3.8 Заполним таблицу «Клиенты»
INSERT INTO Клиенты
VALUES (NULL, 'Петров И.И.', '1234567', 'Москва, ул. Пахарей 17-5'),
(NULL, 'Иванов П.П.', '8901234', 'Москва, ул. Слесарей 22-1д-2'),
(NULL, 'Сумкин Ф.Б.', '5678901', 'МО, Химки, ул. Улицы 42-123'),
(NULL, 'Сидоров С.М.', '4145252', 'Москва, ул. Бауманская 212-2'),
(NULL, 'Пушкин С.А.', '9982989', 'Магадан, ул. Пушкина 12-44');
Допустим, мы не хотим, чтобы в нашу таблицу могли ввести второго человека с такой же фамилией и инициалами.
Для этого Модифицируем таблицу «Клиенты», введя уникальный индекс, который запретит вводить повторяющиеся значения по столбцу «ФИО Клиента».
Для начала удалим уже существующий НЕуникальный индекс.
ALTER TABLE Клиенты DROP INDEX `ixClient`;
Добавим уникальный индекс, накладывающий ограничение на столбец «ФИО Клиента»:
ALTER TABLE Клиенты ADD CONSTRAINT `ixName` UNIQUE INDEX (`ФИО Клиента`);
Теперь, если попробовать ввести повторяющееся значение фамилии, то команда не пройдет.
INSERT INTO Клиенты
VALUES (NULL, 'Петров И.И.', '4440102', 'Москва, ул. Сезам 1-5');
Предположим, у нас есть список фамилий, которые необходимо ввести и среди этого списка могут встречаться повторяющиеся. В этом случае ни одна из фамилий списка не будет введена. Одна единственная повторяющаяся фамилия отменит всю команду. Чтобы этого не происходило, и все фамилии благополучно записались в БД проигнорировав повтор, нужно использовать команду IGNORE. (Повторенная фамилия записана не будет, зато запишутся все остальные.)
INSERT IGNORE INTO Клиенты
VALUES (NULL, 'Петров Т.П.', '4440102', 'Москва, ул. Сезам 1-5'),
(NULL, 'Сидорова А.К.', '4145252', 'Москва, ул. Бауманская 212-2'),
(NULL, 'Пушкин С.А.', '9982989', 'Магадан, ул. Пушкина 12-44');
Проверим правильность заполнения.
SELECT * FROM Клиенты;
Как мы видим, второй «Пушкин С.А.» записан не был.
Исправим инициалы первого (и единственного в нашей БД) Пушкина оператором UPDATE:
UPDATE Клиенты -- Обновить таблицу клиенты
SET `ФИО Клиента`= 'Пушкин А.С.' -- Установить «Пушкин А.С» в столбце «ФИО Клиента»
WHERE `ФИО Клиента` = 'Пушкин С.А.'; -- У тех строк, где «ФИО Клиента» равняется «Пушкин С.А.»
Можно было сделать то же самое, и другим способом:
UPDATE Клиенты -- Обновить таблицу клиенты
SET `ФИО Клиента`= 'Пушкин А.С.' -- Установить «Пушкин А.С» в столбце «ФИО Клиента»
WHERE `Код клиента` = 5; -- У тех строк, где «Код Клиента» равняется 5
Теперь удалим последнего Клиента из Таблицы.
DELETE FROM Клиенты
WHERE `Код Клиента` = 8;
*Чтобы удалить ВСЕ строки из таблицы следует написать « DELETE FROM Клиенты;»