Урок 6. MySQL. Тестовая база данных World


Содержание материала:

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Страниц: 1

#1 31.01.2013 10:18:35

Тестовая БД с полями на русском языке

Поиск по форуму не помог (не исключаю, что плохо искал).
Нужна база данных (или просто таблица, записей, хотя бы, на 100), произвольного содержания. Важный момент — наличие на русском языке каких-нибудь полей.
Может, у кого крутиться сайт со статьями или товарами и описанием на русском? Сугубо для личных целей.
Буду очень признателен за помощь.

#2 31.01.2013 11:13:01

Re: Тестовая БД с полями на русском языке

На русском сходу не соображу. На английском — да хотя бы вот.

#3 31.01.2013 11:40:23

Re: Тестовая БД с полями на русском языке

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

Отредактированно wine-time (31.01.2013 11:40:49)

#4 31.01.2013 15:15:06

Re: Тестовая БД с полями на русском языке

См. прикрепленный файл

edit: пардон; про минимум 100 записей невнимательно прочитал. Впрочем, непонятно, чем таблица с одной записью принципиально отличается от таблицы на 100 записей с точки зрения кодировки.

#5 01.02.2013 11:35:01

Re: Тестовая БД с полями на русском языке

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

Урок 6. MySQL. Тестовая база данных World

Проанализировав статистику переходов на сайт, я заметил что многие пользователи ищут уроки по MySQL. Поэтому я решил помочь, и открываю новую рубрику на сайте, её название будет MySQL. Хочу сказать вам что переход на БД в программировании открывает новые горизонты. В свое время я полностью изучил работу с файлами и знал все функции вдоль и поперек. Со временем для хранения информации, файлов становиться недостаточно, и зачастую решение какой либо задачи, выливается в танцы с бубном, громоздкий код и конечно потраченное время. В скором времени я опубликую достаточно большую статью по работе с файлами, а сейчас мы сделаем небольшой прыжок вперед и приступим к изучению элементарных функции для работы с MySQL.

Создание БД MySQL

Чтобы создать новую базу данных, нам необходим PhpMyAdmin. Если вы будете тестировать скрипты на локальном сервере, то создание БД не вызовет каких либо проблем. Набрав в адресной строке http://127.0.0.1/phpmyadmin, вы попадает в главное меню управления базами.

Указываете имя базы данных на латинице, в качестве «Сравнения» указываете utf8_unicode_ci и нажимаем кнопку создать. После перезагрузки страницы мы попадаем в нашу базу данных. В скобках указано количество таблиц в базе.

На предыдущем скриншоте мы видим главное меню, в котором мы можем создать таблицу внутри базы данных. Для чего нужна таблица и что это такое? Таблица состоит из полей, вспомните например Microsoft Excel , там все рабочее поле разбито на ячейки. Например вы создаете таблицу, в которой создаете прайс техники

В ней вы указываете имя колонки (товар, описание, цена) и далее забиваете информацию. Очень похожий принцип и у таблиц MySQL. Я специально создал таблицу notebook, и продублировал туда все значения, вот что получилось:

Как вы видите у каждого столбца есть свое описание (id, model, price), они играют очень важную роль. В своих запросах мы будем выбирать нужные данные, удовлетворяющие каким либо условиям.

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

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

Первое поле у нас будет носить имя столбца, в качестве первого будет id – идентификатор товара. Он необходим для совершения каких либо действий с этим товаром (редактирование или удаление). Далее указываем Тип. Т.к. идентификатор будет числовой, то тип данных принимает значение INT или INTEGER (ЦЕЛОЕ ЧИСЛО). Далее вводим Длина/значение, указываем 5 (5 это не значит что максимальное количество будет 5, а то что значение будет не более 99999, я думаю этого хватит для начала). Далее идет поле сравнение, в нем необходимо указать в какой кодировке будут храниться данные. Для поля id мы оставляем значение по умолчанию. Атрибуты пропускаем. Далее переходим к полю По умолчанию и ставим значение единицу, это будет означать что первый товар будет начинаться с единицы. Переходим к Дополнительно и выставляем атрибут auto_increment. Это позволяет при добавлении новой записи, автоматически присваивать идентификатор товару, причем не случайным образом, а в порядке возрастания.

Переходим к заполнению поля model. Тип мы выставим VARCHAR. VARCHAR (ПЕРЕМЕННОЕ ЧИСЛО СИМВОЛОВ), этот тип является текстовой строкой и может иметь любую длину до определённого реализацией максимума (обычно 254 символа). Для описания модели нам хватит длины строки в 200 символов, которые мы указываем в поле длина.

Далее переходим к полю price. Здесь тип переменных будет выражен числами, поэтому тип данных устанавливаем INT, и длину значения 5.

Ниже выставляем Тип таблиц – MyISAM, сравнение – utf8_unicode_ci и нажимаем кнопку сохранить. Если все значения были введены правильно то появиться окно, с выполненым запросом, структура таблицы и в левом меню вы увидите вашу новую таблицу notebook.

На этом этап создания таблицы завершен, переходим к программированию.

Подключение к БД MySQL

Чтобы выполнять запросы к базе нам необходимо к ней подключиться и выбрать таблицу . Это достаточно просто и выполняется при помощи 2 стандартных функций.
mysql_connect — Открывает соединение с сервером MySQL

mysql_select_db — Выбирает базу данных MySQL

Функция mysql_select_db вызывается только после функции mysql_connect. Для того чтобы подключиться и выбрать базу test, мы берем второй фрагмент кода. Этот фрагмент мы будем использовать в каждом скрипте, где необходима работа с mysql.

Чтобы создать запись в БД необходимо сформировать запрос, который будет вставлять значения в таблицу. Создаем новый файл в php expert editor‘е, вставляем фрагмент кода приведенный выше, который отвечает за подключение к БД и выбора нужной таблицы.

Давайте разберем то, что мы присвоили переменной $query. Транскрипция запроса выглядит следующим образом:

$query = «INSERT(ВСТАВИТЬ) INTO (КУДА/В) ‘notebook’ VALUES()ЗНАЧЕНИЯ(Значение 1го поля,значение 2го поля,значение 3го поля)»;

Обратите внимание на первое значение в скобках после VALUES. Мы указали тип переменной NULL, это значит что в это поле ничего записываться не будет. Вот так просто мы разобрали с вами запрос, что делать дальше?!

Далее есть функция, которая отвечает за выполнение запроса, и возвращает результат. Это функция
mysql_query — Посылает запрос MySQL

200?’200px’:»+(this.scrollHeight+5)+’px’);»> $result = mysql_query($query);

В нашем случае переменная $result будет содержать результат данного запроса. В конце мы добавим простое условие, которое укажет нам об успешном или неуспешном выполнении запроса.
Итог можете посмотреть при помощи PhpMyAdmin, перейдя в таблицу notebook и нажав вкладку Обзор

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

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

десь все достаточно просто:

Т.е. выбираем все столбцы из таблицы ноутбук. Далее осуществляем запрос:

echo «$r[model] — $r[price]
«;

Используем функцию mysql_fetch_array чтобы получить массив значений, ключами которого являются имена столбцов (model и price).При обращении к файлу мы должны получить следующую картину:

Давайте теперь добавим условие, например вывести ноутбуки, цена которых превышает 30 000. Сделать это можно двумя способами. Можно просто внутри цикла while вставить условие

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

Предыдущий фрагмент кода остается без изменений, меняется лишь только запрос:

Основы создания баз данных MySQL

Дельфины всегда вызывали доверие у людей. Они ассоциируются у нас с добротой и радостью. Хоть дельфин и является символом MySQL , но это никак не объясняет той популярности, которой она пользуется во всем мире:

Согласно актуальной статистике MySQL занимает первое место по распространенности в интернете среди всех систем реляционных БД.

Особенности MySQL

Процедура создания базы данных MySQL ничем не отличается от других СУБД . Да и ее бесплатность тоже едва ли является основной причиной популярности данной системы. Например, SQL Server от Microsoft . В каждой версии данного продукта выходит его бесплатная редакция, и с довольно неплохими техническими характеристиками.

Особенности СУБД MySQL :

  • Чаще всего используется в качестве удаленного сервера;
  • Включает в себя большое количество типов таблиц;
  • Поставляется со специальным типом EXAMPLE , показывающим принцип создания новых таблиц;
  • Высокая степень масштабируемости за счет поддержки большинства популярных платформ;
  • Открытый исходный код – благодаря этому данная СУБД постоянно совершенствуется и модернизируется множеством разработчиков по всему миру;
  • Создано большое количество API , обеспечивающих взаимосвязь MySQL c основной частью всех программных языков;
  • Максимальный размер файла таблицы базы данных ограничивается лишь возможностями используемой операционной системы.

У ближайшего конкурента MySQL системы MS SQL Server в бесплатной редакции Express ограничение на размер базы данных составляет 10 ГБ.

  • Последняя версия СУБД 5.7.5m15 ( тестовая ) вышла в сентябре 2014.

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

Основной логической и структурной единицей деления данных в любой реляционной модели представления информации является база. Выше нее идет лишь сервер. Любая база данных состоит из таблиц, каждая из которых делится на столбцы. Рассмотрим все способы, как создать в MySQL базу данных.

Среда PHPMyAdmin является одной из самых популярных оболочек для работы с MySQL . Ее интерфейс во многом облегчает администрирование баз данных.

Для создания базы данных MySQL через PHPMyAdmin делаем следующее:

  • Заходим в оболочку;
  • Переходим на вкладку « Базы данных »;
  • В первое поле вводим название создаваемой базы данных, а из выпадающего списка выбираем нужную кодировку. В нашем случае это utf8_genegal_ci .

Длина имени базы данных не должна превышать 64 символа.

  • Затем нажимаем на кнопку « Создать »:
  • После этого имя созданной БД MySQL должно появиться в списках слева и внизу:

Теперь создадим в нашей базе данных первую таблицу. Делаем следующее:

  • В списке слева находим имя нашей базы данных и нажимаем на него:
  • В следующем окне вводим название таблицы и задаем количество столбцов;
  • Затем нажимаем на кнопку « Ok ».

То же самое можно сделать, нажав на ссылку «Создать таблицу» сразу под списком баз данных слева, но тогда в следующем окне выведется заготовка без имени и с четырьмя столбцами.

  • Следующим шагом задаем структуру нашей таблицы. Прописываем имена и типы данных, которые будут храниться в столбцах таблицы;
  • После этого нажимаем на кнопку « Сохранить »:
  • Таблица нашей БД MySQL создана и готова для заполнения данными:

Но это не единственный способ, как можно создать базу данных в PHPMyAdmin . Аналогичный эффект можно получить, если воспользоваться SQL запросом. Для этого применяется команда CREATE . Ее синтаксис:

  • IF NOT EXISTS – служит для отслеживания уникальности имени базы данных. Если не указывать этот параметр, то в случае создания базы с одинаковым названием может возникнуть ошибка выполнения запроса;
  • db_name – указывается имя создаваемой базы данных;
  • CHARACTER SET charset – устанавливается кодировка базы данных. Если не указано, то используется значение по умолчанию;
  • COLLATE collation – задается порядок сортировки данных. Необязательный параметр.
Топ-пост этого месяца:  Области меню WordPress сайта

Теперь создадим базу данных с помощью SQL запроса через оболочку PHPMyAdmin :

  • Переходим на вкладку « SQL »;
  • В появившемся окне редактора вводим запрос на создание базы данных;
  • Или жмем на иконку « Окно запроса ». Она находится слева над списком баз данных:
  • Внизу нажимаем на « Ok »:
  • После этого название нашей базы данных отобразится в списке слева:

Для удаления sql базы данных используйте команду DROP DATABASE «my_db» .

  • Запрос для создания базы данных с указанием необязательных параметров будет выглядеть следующим образом:

Настройка резервного копирования базы данных

Возможность восстановления базы данных очень важна. В случае непредвиденных ситуаций восстановление поможет вернуть утраченную информацию и быстро возобновить работу ресурса.

Настраиваем резервное копирование базы данных в PHPMyAdmin . Порядок действий:

  • В списке слева выбираем нужную нам базу данных;
  • Жмем на вкладку « Экспорт »;
  • Нажимаем « Ок ».

Если в разделе « Способ экспорта » выбрать значение « Обычный », то перед вами раскроется большое окно с множеством параметров для настройки:

Теперь попытаемся восстановить сохраненную копию базы. Но для начала удалим уже существующий экземпляр. Переходим во вкладку « Операции » и нажимаем ссылку « Удалить базу данных »:

Для восстановления базы MySQL в PHPMyAdmin переходим на вкладку « Импорт ». В разделе « Импортируемый файл » в зависимости от места, где вы сохраняли копию базы данных, выбираем источник. После этого жмем на кнопку « ОК », расположенную в нижней части экрана:

Иногда после внесения каких-либо изменений требуется восстановить не всю базу данных, а лишь определенную таблицу. Такая возможность также реализована в PHPMyAdmin . Для этого на странице нужной таблицы внизу ее структуры из выпадающего списка выбираем соответствующий пункт и внизу жмем на « Ок »:

Сжатие баз данных в MySQL

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

Также для уменьшения размеров базы данных рекомендуется сохранять ее резервные копии в виде архивов. Сжатие ( компрессия ) резервных копий настраивается в одноименном пункте на вкладке « Экспорт » в разделе « Вывод »:

Еще одним способом уменьшения размера БД MySQL является следующий набор действий:

  • Создание дампа ( копии ) через командную строку с использованием команды mysqldump ;
  • Удаление всех баз данных;
  • Остановка всех службы MySQL ;
  • Последующее восстановление удаленных баз данных из дампа:

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

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

Как видите, MySQL является оптимальной СУБД для построения движков на основе php. А PHPMyAdmin – основным средством администрирования баз данных MySQL в интернете.

MySQL: mysqlslap — нагрузочное тестирование

mysqlslap устанавливается вместе с MySQL:

Создаём тестовую базу:

Самый простой вариант проверки скорости работы MySQL:

Тут — mysqlslap автоматически создаёт таблицу, выполняет INSERT произвольных данных в неё, затем выполняет SELECT и удаляет таблицу.

Что бы просмотреть все выполняемые действия — добавьте -v , -vv или -vvv :

Что бы добавить эмуляцию нескольких одновременных подключений — используйте опцию —concurrency :

Что бы повторить тестирование несколько раз — имеется опция —iterations :

Что бы указать количество запросов, выполняемых каждым «клиентом» — используйте опцию —number-of-queries . Её число будет поделено на кол-во «клиентов».

Например — при вызове mysqlslap с опциями —concurrency=10 —number-of-queries=100 — 100/10, следовательно каждый «клиент» выполнит по 10 запросов:

По-умолчанию — mysqlslap создаёт таблицу с двумя столбцами — один int и один var.

Если вы хотите изменить эти значения и увеличить таблицу — используйте опции —number-char-cols для указания количества столбцов типа char , и —number-int-cols — для столбцов ineteger :

Наиболее удобная опция — вызов собственных запросов с помощью опции —query :

Опция —create-schema служит для указания используемой базы данных.

Так же — в —query можно указать путь к sql -файлу с запросом.

И ещё одна приятная возможность — опция — —engine , с помощью которой можно явно задать тип таблиц для тестирования и сравнения:

Полный список опций можно посмотреть командой:

codedokode / Задача и теория по SQL, MySQL, PostgreSQL и базам даннх вообще.md

Этот урок переехал по адресу https://github.com/codedokode/pasta/blob/master/db/databases.md . Копия ниже устарела и не будет больше обновляться.

Что такое базы данных

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

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

Есть разные виды баз данных, но этот урок посвящен базам данных, поддерживающим язык SQL. В них любые операции над данными — добавление, удаление, поиск — делаются с помощью отправки SQL-запросов. Сам язык достаточно простой и запросы на нем напоминают обычные предложения на английском языке. Ну к примеру, запрос на удаление из БД пользователя с email [email protected] выглядит так: DELETE FROM users WHERE email = ‘[email protected]’ . Если знать английский («удалить из пользователей где email равен ‘[email protected]'»), то смысл запроса легко понять, даже не зная SQL. Запросы может отправлять как сам разработчик вручную, так и написанная им программа.

SQL это что-то вроде стандарта в мире баз данных. Зная этот язык, можно работать с разными БД от разных производителей.

Программы, реализующие базу данных

Есть разные программы, которые позволяют создавать и управлять базой данных. Они называются СУБД (системы управления БД). Из бесплатных самые известные — это MySQL и PostgreSQL. MySQL (в 2020 году) более распространена, а в PostgreSQL больше интересных нестандартных возможностей (а также, считается что она более полно поддерживает стандарт).

Есть и коммерческие СУБД — например, MSSQL, Oracle DB.

Наконец, есть еще встраиваемые СУБД, которые используются не отдельно, а встраиваются в другую программу и используются только ей. Ну например, (в 2020 году) встроенную бесплатную СУБД SQLite использовали браузер Chrome, который хранил с ее помощью историю и закладки, Skype для хранения сообщений и множество мобильных приложений под Android и iOS.

Со всеми этими БД можно работать, зная язык SQL.

Устройство базы данных

База данных хранит данные в таблицах. Таблицы создает разработчик, и обычно каждая из них предназначается для своей сущности — например, таблица со списком пользователей, таблица тем на форуме, таблица сообщений на форуме. Таблица состоит из колонок, каждая из которых имеет определенных тип (число, строка). Ну к примеру, таблица для хранения информации о пользователях форума может выглядеть так:

id name email password_hash salt registered
1 Администратор [email protected] abbs09s7s6s6 gt9xbxvx4x30 2014-08-02
2 Иван [email protected] hd6bc00c8c7c665ce gs65s4s4sb0x 2015-01-01

При регистрации скрипт добавляет в нее информацию о новом пользователе, а при логине — проверяет введенные email и пароль. Мы, конечно, в целях безопасности не храним в базе сами пароли в открытом виде, а получаем из них хеш с солью и сохраняем их в колонках password_hash и salt (по которым можно проверить правильность введенного при логине пароля, но нельзя восстановить его). Также, мы присваиваем каждому пользователю уникальный числовой идентификатор ( id ), который еще называют первичный ключ — это позволяет потом в других таблицах ссылаться на него (например, в таблице сообщений мы можем хранить id автора сообщения, по которому можно достать информацию о нем).

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

id author_id posted text
1 1 2014-08-03 Добро пожаловать на наш форум! Жду ваших сообщений.
2 1 2014-08-04 Что-то никого нету.
3 1 2014-08-05 Ни души.
4 2 2015-01-01 Всем привет. Я новый тут.

Здесь колонка id хранит идентификатор сообщения, author_id — идентификатор автора сообщения (по которому можно найти его имя, email в первой таблице), posted — дату отправки и text — тело сообщения. Первые 3 сообщения оставил Администратор, а четвертое — Иван.

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

Работа с базой данных

Как правило сам сервер базы данных (программа, которая обеспечивает ее работу) не имеет своего интерфейса и каких-то окошек, кнопочек, чтобы с ним взаимодействовать. Управление базой данных делается с помощью запуска программы-клиента, который подсоединяется к серверу, пересылает ему SQL запросы и выводит полученные ответы. Одновременно к БД может подсоединиться несколько клиентов.

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

Те, кто освоил основы, могут использовать и более сложные программы-клиенты с графическим интерфейсом. Они могут отображать информацию из базы данных в виде таблиц, перемещаться по ним, менять значения в них. При этом можно запускать и вручную написанные SQL запросы. Я не буду тут писать названия конкретных программ, но их легко найти по словам вроде «mysql gui», «mysql admin», «postgresql gui» и так далее. Я бы советовал сначала научиться работать исключительно в клиенте командной строки, а только потом переходить к этим программам.

Наконец, подсоединяться и отправлять запросы к БД можно из программы. Например, скрипт на языке PHP может таким образом выбирать данные из базы и отображать на веб-странице. Для этого нужна библиотека или расширение-клиент для базы данных. В PHP есть даже 2 расширения для этого (PDO и MySQLi), я рекомендую использовать расширение PDO, так как оно поддерживает исключения, за счет чего при какой-то ошибке проще получить информацию о ней.

Изучаем базы данных

Теория и туториалы для начинающих:

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

После этого надо научиться правильно проектировать таблицы и связи между ними. Для этого надо изучить нормализацию БД. По этой теме есть разные статьи — некоторые написаны простым языком, а некоторые нет. Это важная тема, если не соблюдать принципы нормализации, то потом с такой базой будет неудобно работать.

Приведу пример. Теория требует избегать дублирования данных. Допустим, разработчик не изучал нормализацию и сделал так, что в форуме в таблице сообщений у каждого сообщения хранится имя написавшего его пользователя. Таким образом, если пользователь оставил много сообщений, то его имя будет сохранено много раз. Если теперь пользователь захочет поменять имя, то нам придется поменять его в таблице пользователей, а также найти все его сообщения и поменять имя там. В лучшем случае это потребует дополнительного труда (найти все таблицы, где это имя упоминается), в худшем случае мы можем сделать ошибку, и поменяв имя в одном месте, забыть поменять его в другом. На базе из нескольких таблиц это маловероятно, но в больших системах таблиц могут быть детсяки и даже сотни. Получается, что несоблюдение принципов проектирования базы данных приводит к тому, что на написание кода будет уходить больше времени разработчиков.

А пока еще несколько полезных ссылок:

Под Windows в командной строке не работают русские буквы

Надо выполнить команду SET NAMES cp866; после соединения: http://gahcep.github.io/blog/2013/01/05/mysql-utf8/

Еще ссылки на тему кодировок при соединении с mysql из php:

На что стоит обратить внимание?


Вот список понятий, которые стоит знать если ты хочешь очень хорошо разбираться в MySQL:

  • управление базами данных: CREATE DATABASE, DROP DATABASE, SHOW DATABASES
  • управление таблицами: CREATE TABLE, ALTER TABLE, DROP TABLE, SHOW TABLES, SHOW CREATE TABLE, DESC table, TRUNCATE table
  • управление правами доступа: GRANT, SHOW GRANTS
  • типы колонок: ENUM, SET, CHAR, VARCHAR, TEXT, DATE, TIME, DATETIME, TIMESTAMP, INT, FLOAT, TINYINT, DECIMAL, MEDIUMTEXT, LONGTEXT. В чем разница между TIMESTAMP и DATETIME? Между FLOAT и DECIMAL? CHAR и VARCHAR?
  • DECIMAL — тип с фиксированной точностью. В отличие от FLOAT/DOUBLE, которые приближенные и могут терять знаки после запятой, DECIMAL хранит заданное число знаков. Используется например, для хранения суммы денег.
  • NULL и троичная логика (в БД NULL значит «неизвестно». Например, возраст пользователя неизвестен. Соответственно, все операции с NULL это учитывают: NULL + 5 тоже дает в итоге NULL (5 + неизвестное число дает неизвестное число), сравнение (NULL = NULL) возвращает ложь, чтобы проверить равно ли поле NULL надо использовать IS NULL/IS NOT NULL. http://ru.wikipedia.org/wiki/NULL_(SQL))
  • можно ли искать пустые поля условием WHERE x = NULL?
  • при создании таблицы можно сделать поля обязательными для заполнения, указав NOT NULL
  • SELECT/INSERT/DELETE/UPDATE
  • порядок выполнения запроса выборки: FROM+JOIN, WHERE, GROUP, HAVING, ORDER, LIMIT, SELECT (его надо знать наизусть)
  • REPLACE, INSERT IGNORE, INSERT .. ON DUPLICATE KEY UPDATE
  • выборка данных: DISTINCT, JOIN, ORDER BY, GROUP BY, HAVING, LIMIT
  • группировка и аггрегатные функции: GROUP BY, COUNT, MAX, MIN, AVG, SUM
  • транзакции: BEGIN, ROLLBACK, COMMIT
  • внешние ключи: FOREIGN KEY. Внешний ключ — это поле, которое хранит >

Теория по проектированию БД

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

  • виды отношений между таблицами: один-к-одному, один-ко-многим, многие-ко-многим
  • принципы нормализации БД. В интернете можно найти статьи где «нормальные формы» объясняют простыми словами, например http://club.shelek.ru/viewart.php? >Вот цикл статей на Хабре, который подойдет в качестве вступления: 1-3, 4-6, 7-9, 10-13, 14-15, бонус

Чем отличаются движки для таблиц MyISAM и InnoDB?

Если кратко: MyISAM более простой и не поддеживает внешние ключи и транзакции. А они нужны почти всегда. Потому в 99% случаев тебе нужен InnoDB.

Индексы позволяют ускорить поиск по условиям вроде x = ? , x , x BETWEEN ? AND ? , x LIKE ‘xxx%’ , x IN (?, ?, ?) , а также сортировку (поля по которым идет сортировка должны идти в конце индекса). Разница на большой таблице может быть огромная — порядка 1 тысячной секунды против нескольких секунд. Ну например, если у нас есть таблица размером в миллион записей и мы делаем запрос

то без индекса MySQL вынуждена будет прочитать с диска в память миллион значений, отсортировать их только ради того, чтобы взять первые 10. Если же есть индекс по полю y (который хранит отсортированные по возрастанию значения этого поля) то MySQL просто возьмет из него первые 10 записей. Разница в скорости работы будет огромная.

Вот статьи для начинающих про индексы:

Если ты все прочел внимательно, ответь на вопрос, может ли индекс (если да, то какой) ускорить такие запросы:

  • SELECT * FROM table WHERE x <> 1
  • SELECT * FROM table WHERE x + y
  • SELECT MAX(a) FROM table WHERE b = 2
  • SELECT * FROM table WHERE name LIKE ‘%Иван%’
  • SELECT * FROM table WHERE b = 1 AND a

Задачка про лайки

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

  • ид пользователя
  • имя
  • лайков получено
  • лайков поставлено
  • взаимных лайков

Далее, выведи список всех пользователей, которые лайкнули пользователей A и B, но при этом не лайкнули пользователя C. Тут есть несколько вариантов решения.

Сложно? Ну ок, давай начнем с более простой задачи: просто выведи 5 самых популярных пользователей.

  • Если ты используешь несколько связанных друг с другом таблиц, связи необходимо пометить с помощью внешних ключей
  • Желательно на уровне БД запретить возможность ставить пользователю лайк другому пользователю дважды
  • Подсказка: эта задача решается без подзапросов
  • Подсказка: достаточно использовать всего 2 джойна и группировку

Усложненная (но более жизненная) задача про лайки

В воображаемой социальной сети есть Пользователи (id, имя), Фото (id, название, автор) и Комментарии К Фото (id, текст, автор, к какому Фото относится). Необходимо добавить возможность для Пользователей ставить лайки другим Пользователям, Фото или Комментариям К Фото. Нужно реализовать такие возможности:

  • пользователь не может поставить 2 лайка одной и той же сущности (например одному и тому же Фото)
  • пользователь может отозвать лайк
  • необходимо иметь возможность посчитать число полученных сущностью лайков и вывести список Пользователей, поставивших лайки
  • в будущем могут появиться новые виды сущностей которые можно лайкать

Для начала, нужно решить задачу без оглядки на производительность. Очень желательно следовать принципам нормализации и помечать связи внешними ключами (а также на уровне Бд предотвратить возможность повторной отправки лайка). Далее, можно дополнить решение комментариями по поводу оптимизаций производительности.

Тут есть несколько вариантов решения.

Задачка про кинотеатр

Вот дополнительная, более сложная задачка. Есть кинотеатр, в нем идут фильмы. У фильма есть название, длительность (пусть для простоты будет 60, 90 или 120 минут), цена билета (в разное время и дни может быть разная), время начала сеанса (один фильм может быть показан несколько раз в разное время за разную цену). Также, есть информация о купленных билетах (номер билета, на какой сеанс).

  • составь грамотную нормализованную схему хранения этих данных в БД. Внеси в нее 4-5 фильмов, расписание на один день и несколько проданных билетов.

Сделай запросы, считающие и выводящие в понятном виде:

  • ошибки в расписании (фильмы накладываются друг на друга), отсортированные по возрастанию времени. Выводить надо колонки «фильм 1», «время начала», «длительность», «фильм 2», «время начала», «длительность».
  • перерывы больше или равные 30 минут между фильмами, выводятся по уменьшению длительности перерыва. Выводить надо колонки «фильм 1», «время начала», «длительность», «время начала второго фильма», «длительность перерыва».
  • список фильмов, для каждого указано общее число посетителей за все время, среднее число зрителей за сеанс и общая сумма сбора по каждому, отсортированные по убыванию прибыли. Внизу таблицы должна быть строчка «итого», содержащая данные по всем фильмам сразу.
  • число посетителей и кассовые сборы, сгруппированные по времени начала фильма: с 9 до 15, с 15 до 18, с 18 до 21, с 21 до 00:00. (то есть сколько посетителей пришло с 9 до 15 часов, сколько с 15 до 18 и т.д.).

Сложная задача про календарь

Решил предыдущие задачи и они слишком простые? Ок, давай возьмемся за действительно сложную задачу. Напиши SQL-код, выводящий календарь на текущий месяц в виде:

Пн Вт Ср Чт Пт Сб Вс

3 | 4 | 5 | 6 | 7 | 8 | 9 10 | 11 | 12 | 13 | 14 | 15 | 16 17 | 18 | 19 | 20 | 21 | 22 | 23 24 | 25 | 26 | 27 | 28 | 29 | 30

Как подружить юнит-тестирование с базой данных

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

Вводное слово

Система тестирования разрабатывалась в рамках и контексте рабочего проекта, в которой используется своя ORM система работы с базой данных, которая принимает параметризованные SQL запросы и на выходе самостоятельно разбирает полученные табличные данных в объекты. Что накладывает некоторые ограничения при разработке системы тестирования.

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

Мотивация

Зачем мы заставляем себя писать юнит-тесты? Для повышения качества разрабатываемого приложения. Чем больше разрабатываемый проект, тем больше вероятность сломать что-то, особенно во время рефакторинга. Юнит-тесты позволяют быстро проверить корректность работы компонентов системы. Но написание юнит-тестов для методов, взаимодействующих с базой данных – это не такая и простая задача, т.к. для корректной работы теста требуется настроенное окружение, а если точнее, то:

  1. Настроенный сервер баз данных
  2. Правильно настроенные строки подключения к базе
  3. Тестовая база данных со всеми необходимыми таблицами
  4. Правильно заполненные таблицы в тестовой базе данных

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

Описание проблемы

Перед тем как начать рассказ о разработке, еще хотелось бы рассказать, как в большинстве случаев тестируют такие вещи и к чему это может привести.

1. Тестирование запроса в базе данных

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

2. Тестирование через прямой вызов метода

Еще один из простых способов – мы просто открываем участок кода, который выполняется всегда в нашем приложении, например Main, вызываем метод, взаимодействующий с базой данных, устанавливаем точку останова и смотрим результат… Очень похоже на отладку через вывод информационных сообщений на экран.

3. Тестирование через пользовательский интерфейс приложения

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

И все эти сложности приводят к тому, что приходится тратить много времени на тестирование достаточно простых вещей. А, как известно, если это проверять долго, то скорее всего разработчик полениться его тестировать, что приведет к ошибкам. По статистике около 5% ошибок, связанных с неработающими запросами к базе данных, регистрируются в баг трекере. Но также я хочу отметить, что большинство таких ошибок обсуждается устно и достаточно часто, и к сожалению, их невозможно учесть в этой статистике.

Старт разработки

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

Как разработать систему автоматического тестирования?

Первые вопросы, которые у меня возникли – как разработать такую систему, каким требованиям она должна отвечать? Поэтому пришлось потратить время на исследование предметной области, несмотря на то, что я постоянно пишу юнит-тесты. Разработка системы тестирования – это совершенно другая сфера. В рамках данного исследования я пытался найти уже существующие решения, подыскать возможные способы реализации. Но сперва пришлось вспомнить принципы разработки юнит-тестов:

  1. Один тест должен соответствовать одному сценарию
  2. Тест не должен зависеть от времени и различных случайных величин
  3. Тест должен быть атомарным
  4. Время выполнения теста должно быть мало

После этого мне потребовалось разработать процесс тестирования, который бы отвечал этим требованиям.

Какой процесс тестирования подходит?

В результате длительного размышления был выработан простой 3-х этапный процесс:

  1. Инициализация – на данном этапе осуществлялось подключение к серверу баз данных, загрузка скриптов инициализации новой базы данных, а также её анализ. После этого создавалась новая пустая база данных, которая будет использоваться для запуска тестового метода. И конечно же её инициализация необходимой структурой.
  2. Выполнение – метод теста, которые отвечает подходу AAA .
  3. Завершение – в этот момент происходит освобождение использованных ресурсов: удаление используемой базы данных, завершение открытых подключений к серверу баз данных.

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

Анализ разработанной системы

Производительность

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

Этап инициализации Время, мс Доля
Загрузка файла 6

Заключение

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

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

И напоследок хотелось бы узнать, какими образом происходит тестирование уровня доступа к данным на ваших проектах?

Основы работы с MySQL Workbench: быстрый старт, управление схемой данных

Веб-разработчик растёт вместе с проектами, которые он создаёт и развивает. С ростом проектов увеличивается сложность программной части, неизбежно возрастает количество обрабатываемых ею данных, а так же сложность схемы данных. Общение с другими вебщиками показывает, что огромной популярностью среди нас пользуются базы данных MySQL, а для управления ими — небезызвестный PHPMyAdmin. Переходя от маленьких проектов к большим, от cms к фреймворкам, многие, как и я, остаются верны MySQL. Однако для проектирования сложной базы данных с большим количеством таблиц и связей, возможностей PHPMyAdmin катастрофически не хватает. Поэтому я решил написать обзор MySQL Workbench — замечательной бесплатной десктопной программы для работы с MySQL.

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

MySQL Workbench — инструмент для визуального проектирования баз данных, интегрирующий проектирование, моделирование, создание и эксплуатацию БД в единое бесшовное окружение для системы баз данных MySQL.

Должен сказать, что программа действительно великолепная. Она позволяет быстро и с удовольствием накидывать схемы данных проекта, проектировать сущности и связи между ними, безболезненно внедрять изменения в схему и так же быстро и безболезненно синхронизировать её с удалённым сервером. А графический редактор EER-диаграмм, напоминающих забавных таракашек, позволяет увидеть общую картину модели данных и насладиться её лёгкостью и элегантностью 🙂 После первой же пробы этот инструмент становится незаменимым помощником в боевом арсенале веб-программиста.

Скачать MySQL Workbench

Дистрибутив MySQL Workbench доступен на этой странице. Самая свежая версия программы на момент написания статьи — Version 6.1. Перед скачиванием требуется выбрать одну из следующих платформ:

  • Microsoft Windows (доступны MSI Installer и ZIP архив)
  • Ubuntu Linux
  • Fedora
  • Red Hat Enterprise Linux / Oracle Linux
  • Mac OS X

После выбора платформы вам предлагают зарегистрироваться или авторизоваться в Oracle. Если не хотите, внизу есть ссылка «No thanks, just start my download» — жмите на неё 😉

Начало работы

Стартовый экран программы отражает основные направления её функциональности — проектирование моделей баз данных и их администрирование:

В верхней части экрана находится список подключений к MySQL серверам ваших проектов, а список последних открытых моделей данных — в нижней части экрана. Работа обычно начинается с создания схемы данных или загрузки существующей структуры в MySQL Workbench. Приступим к работе!

Создание и редактирование модели данных

Для добавления модели нажимаем плюсик рядом с заголовком «Models» или выбираем «File → New Model» (Ctrl + N):

На этом экране вводим имя базы данных, выбираем кодировку по умолчанию и, если нужно, заполняем поле комментария. Можно приступать к созданию таблиц.

Добавление и редактирование таблицы

Список баз данных проекта и список таблиц в пределах базы данных будет располагаться во вкладке «Physical Schemas». Чтобы создать таблицу, дважды кликаем на «+Add Table»:

Откроется удобный интерфейс для редактирования списка полей и их свойств. Здесь мы можем задать название поля, тип данных, а так же установить для полей различные атрибуты: назначить поле первичным ключом (PK), пометить его Not Null (NN), бинарным (BIN), уникальным (UQ) и другие, установить для поля авто-инкремирование (AI) и значение по умолчанию (Default).

Управление индексами

Добавлять, удалять и редактировать индексы таблиц можно во вкладке «Indexes» интерфейса управления таблицей:

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

Связи между таблицами

Установка внешних ключей и связывание таблиц возможно только для таблиц InnoDB (эта система хранения данных выбирается по умолчанию). Для управления связями в каждой таблице находится вкладка «Foreign Keys»:

Для добавления связи открываем вкладку «Foreign Keys» дочерней таблицы, вводим имя внешнего ключа и выбираем таблицу-родителя. Далее в средней части вкладки в графе Column выбираем поле-ключ из дочерней таблицы, а в графе Referenced Column — соответствующее поле из родительской таблицы (тип полей должен совпадать). При создании внешних ключей в дочерней таблице автоматически создаются соответствующие индексы.

В разделе «Foreign Key Options» настраиваем поведение внешнего ключа при изменении соответствующего поля (ON UPDATE) и удалении (ON DELETE) родительской записи:

  • RESTRICT — выдавать ошибку при изменении / удалении родительской записи
  • CASCADE — обновлять внешний ключ при изменении родительской записи, удалять дочернюю запись при удалении родителя
  • SET NULL — устанавливать значение внешнего ключа NULL при изменении / удалении родителя (неприемлемо для полей, у которых установлен флаг NOT NULL!)
  • NO ACTION — не делать ничего, однако по факту эффект аналогичен RESTRICT

В приведённом примере я добавил к дочерней таблице UserProfile внешний ключ для связи с родительской таблицей User. При редактировании поля userId и удалении позиций из таблицы User аналогичные изменения будут автоматически происходить и со связанными записями из таблицы UserProfile.

Наполнение таблицы базовыми данными

При создании проекта в базу данных часто нужно добавлять стартовые данные. Это могут быть корневые категории, пользователи-администраторы и т.д. В управлении таблицами MySQL Workbench для этого существует вкладка «Inserts»:

Как видно из примера, в случае, если перед записью в базу данных к данным нужно применить какую-то функцию MySQL, это делается с помощью синтаксиса \func functionName(‘data’), например, \func md5(‘password’).

После ввода данных необходимо сохранить их в локальную базу данных нажатием на кнопку «Apply Changes».

Создание EER диаграммы (диаграммы «сущность-связь»)

Для представления схемы данных, сущностей и их связей в графическом виде в MySQL Workbench существует редактор EER-диаграмм. Для создания диаграммы в верхней части экрана управления базой данных дважды кликаем на иконку «+Add Diagram»:

В его интерфейсе можно создавать и редактировать таблицы, добавлять между ними связи различных типов. Чтобы добавить уже существующую в схеме таблицу на диаграмму, просто перетащите её из панели «Catalog Tree».

Для экспорта схемы данных в графический файл выберите «File → Export», а затем один из вариантов (PNG, SVG, PDF, PostScript File).

Импорт существующей схемы данных (из SQL дампа)

Если у нас уже есть схема данных, её можно без труда импортировать в MySQL Workbench для дальнейшей работы. Для импорта модели из SQL файла выбираем «File → Import → Reverse Engineer MySQL Create Script. «, после чего выбираем нужный SQL файл и жмём «Execute >»

В MySQL Workbench так же предусмотрен импорт и синхронизация модели данных нарямую с удалённым сервером. Для этого потребуется создать подключение удалённого доступа к MySQL, о которых я расскажу в продолжении данного обзора.

Демо-проект из статьи доступен для скачивания по этой ссылке. Желаю успехов и красивых таракашек схем!

Проектирование базы данных MySQL

Тщательное проектирование базы данных чрезвычайно важно для безупречной работы приложения. Как установка принтера в дальнем конце офиса ведет к снижению производительности труда, размещение данных со слабыми взаимосвязями снижает эффективность и может вынудить сервер базы данных тратить значительное время на поиск требуемых данных. Разрабатывая структуру базы данных, задумайтесь о вопросах, возникающих при работе с ней. Например: «Какие дополнительные сведения имеются о продаваемом продукте?» Или: «Верны ли эти имя пользователя и пароль?»

Продолжение урока будет доступно вам
после покупки курса MySQL с нуля

Об авторе

Если вам интересно узнать
как я стал программистом,
читайте вот эту статью.

MySQL Workbench. Создание базы данных

С появлением в составе MySQL программы MySQL Workbench был значительно упрощён процесс создания баз данных (БД). Ведь то, что раньше приходилось делать вручную с помощью SQL скрипта и командной строки, теперь можно сделать «в визуальном режиме» с помощью дружественного графического интерфейса.

Рассмотрим процесс создания БД с помощью MySQL Workbench более подробно.

На скриншоте ниже представлен общий вид окна программы MySQL Workbench.

Для того чтобы создать БД нужно в левой панели в области со списком БД (обозначена как SCHEMAS) кликнуть правой кнопкой мыши и в контекстном меню выбрать «Create Schema».

После этого появится вкладка, в которой следует указать название новой БД и указать параметры сортировки. БД, для примера, будет названа mynewdatabase. Параметры сортировки можно либо выбрать из выпадающего списка либо оставить те, что предлагаются по умолчанию (в данном примере оставлены параметры по умолчанию).

После этого, для продолжения создания БД, следует нажать кнопку «Apply”. В появившемся диалоговом окне будет показан сгенерирванный MySQL Workbench SQL скрипт создания БД. В случае необходимости, этот скрипт можно отредактировать прямо в этом окне.

В верхней части окна имеется область Online DDL. Она предназначена для установки параметров выполнения скрипта. Эти параметры могут быть полезны при манипуляциях с уже существующей БД. При создании БД рекомендуется оставить значения по умолчанию («Default»).

При нажатии кнопки «Apply» новая БД будет создана.

Для того, чтобы закрыть окно следует нажать кнопку «Finish».

Таким образом, с помощью всего на всего двух несложных шагов можно создать новую БД MySQL.

лабы по информатике, егэ

лабораторные работы и задачи по программированию и информатике, егэ по информатике

SQL урок 0 часть 2. Задания по созданию баз данных

Задание «Институт»

Создание базы данных Институт было рассмотрено ранее. Вспомним основные этапы по созданию таблиц и их заполнению:

База данных включает три таблицы:

Заполнение таблиц данными:

Сначала заполняется главная таблица — teachers:
Таблица courses:

Поле tid является внешним ключом для соединения с таблицей teachers (полем id )

Таблица lessons:

Поле tid является внешним ключом для соединения с таблицей teachers (полем id )

Задание «Компьютерные курсы»

Необходимо создать sql базу данных для работы компьютерных курсов.

База данных включает три основных таблицы:

  • главная таблица Группы: список номеров учебных групп;
  • таблица Список: список учащихся и сведения по ним;
  • таблица Личные данные: сведения по учащимся и отметки по предметам.

    Поля-счетчики (Auto increment AI):

    • таблица Список — поле Код ,
    • таблица Личные данные — не имеет счетчика, т.к. поле Код студента — внешний ключ.

    Установка первичных ключей

    В таблице Список внешним ключом является поле Учебная группа , которое связывает таблицу с одноименным полем таблицы Группы .

    В таблице Личные данные внешним ключом является поле Код студента (оно же является и внутренним ключом), которое связывает таблицу с таблицей Список по полю Код .

    Установка связей

    Подразумевается, что данные для поля «Учебная группа» в таблице Список будут автоматически заполняться из таблицы Группы ( Учебная группа ). Для этого необходимо установить связь между таблицами:

    Для автоматического заполнения поля Учебная группа необходимо определить внутреннюю связь:

    Использование дизайнера схемы данных:

    Войдите в режим работы с базой данных, для этого щелкните по ссылке:

    Далее проследуйте по ссылке:

    Связать таблицы можно с помощью кнопки Создать связь:

    Заполнение таблиц данными:

    Сначала заполняется таблица Группы , чтобы значение поля Учебная группа впоследствии автоматически добавлялось в таблице Список при заполнении поля Учебная группа .

    Затем заполняется таблица Список :

    В последнюю очередь заполняется таблица Личные данные . В поле Код студента должны быть уникальные значения для каждого студента:

    Задание «Компьютерный магазин»

    Дополните код (для таблиц PC и Notebook ):

    CREATE TABLE `Product` ( `Номер` int(11) NOT NULL AUTO_INCREMENT, `Производитель` varchar(35), `Тип` varchar(35), PRIMARY KEY (`Номер`) ); CREATE TABLE `Printer` ( `code` bigint NOT NULL, `Номер` bigint NOT NULL, `Цветной` bool, `Тип` varchar(24) DEFAULT ‘Лазерный’, `Цена` int, PRIMARY KEY (`code`) );

    * Сохраните сгенерированный код базы данных для дальнейшей работы ( Export -> SQL )

    Номер Производитель Тип
    1 Америка Компьютер
    2 Африка Компьютер
    3 Россия Компьютер
    4 Россия Принтер
    5 Япония Принтер
    6 Америка Компьютер
    7 Россия Ноутбук
    8 Китай Принтер
    9 Америка Компьютер
    10 Китай Ноутбук

    Таблица PC:

    code Номер Скорость Память HD СкоростьСчит Цена
    1 1 1100 1000 500 52 20000
    2 2 1500 2000 500 52 25000
    3 3 1500 2000 1000 49 28000
    4 6 2000 2500 1000 52 29000
    5 9 2000 3000 1000 52 32000

    Таблица Ноутбук:

    code Номер Скорость Память HD Экран Цена
    1 7 2000 2000 512 19 25000
    2 10 2000 3000 1000 24 35000

    Таблица Принтер:

    code Номер Цветной Тип Цена
    1 4 1 Лазерный 15000
    2 5 Струйный 2000
    3 8 Лазерный 4000

    * При отсутствии возможности работы с phpMyAdmin, воспользуйтесь сервисом sql fiddle.

    Добавить комментарий