Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 15
На сайте нет зарегистрированных пользователей

Пользователей: 13,362
новичок: uvapke
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

База данных студентов на Turbo Pascal (Списки) + Пояснительная записка
Диплом RSA, ЭЦП, сертификаты, шифрование на C#
Обучающая и тестирующая программа по здаче экзамена ПДД на Turbo Pascal ...

Зачем нужна MySQL
Прежде чем рассматривать особенности использования программы MySQL, необходимо понять, почему есть смысл работать именно с ней, а не с Oracle, к примеру, или PostgreSQL, или любой другой известной СУБД. Многие находят программу MySQL особенно привлекательной из-за того, что ее легко изучить. Она также оказывается достаточно гибкой в самых разных ситуациях. Там, где другие СУБД навязывают одну модель данных, MySQL предлагает варианты.

Наиболее важным достоинством MySQL является то, что это — настоящий сервер
баз данных. MySQL — это быстрая СУБД. На Web-узле www.mysql.com приведены результаты тестов, в которых сравнивается производительность MySQL и других реляционных СУБД. Во многих случаях разница существенна, а повышенная производительность ценится всегда.

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

Стоимость приобретения и эксплуатации MySQL очень невелика, как и у всякого открытого ПО. Программу можно бесплатно загрузить с нескольких Web-узлов, к тому же она входит во многие дистрибутивы Linux. Существуют многочисленные форумы, посвященные вопросам поддержки пользователей MySQL. Сотрудники компании MySQL AB постоянно проверяют сообщения, поступающие в список рассылки bugs@lists.mysql.com, и бесплатно устраняют возникающие проблемы. Кроме того, за умеренную плату компания оказывает гарантированную, персональную поддержку всем желающим.

MySQL — надежная СУБД. Так как ее исходные коды доступны для всеобщего обозрения, пользователи регулярно находят и исправляют ошибки по мере их появления. Другим следствием открытости кода стала доступность MySQL для множества платформ. Эта программа может работать в большинстве версий UNIX, Linux, Windows и даже в менее популярных операционных системах, например в OS/2.

История MySQL

Однажды Микаэлю "Монти" Видениусу пришла в голову мысль добавить SQL-модуль в качестве интерфейса к своей старой базе данных, которую он на протяжении 15 лет вел в компании ТСХ DataKonsult AB. Он решил использовать для этой цели открытую реляционную СУБД mSQL, но ему не удалось заинтересовать ее автора, Дэвида Хьюза (David Hughes). Тогда Монти начал создавать собственную реляционную СУБД, клиентский интерфейс которой был смоделирован на основе API-функций mSQL, чтобы в новую систему можно было перенести приложения, написанные для mSQL. В планы Монти никогда не входило реализовывать стандарт языка SQL целиком, но после того как он поделился исходными кодами программы с сообществом разработчиков, ответная реакция оказалась ошеломляющей.

Первая версия MySQL, тогда еще интерфейса к старой базе данных Монти, была закончена в мае 1995 года. На ее написание ушло три месяца. С этого момента программа MySQL начала свой путь к тому, чтобы стать самой популярной СУБД, используемой в Internet.

Компанию ТСХ DataKonsult AB впоследствии переименовали в MySQL AB, и сегодня Монти является руководителем ее технического отдела. Эта шведская компания целиком посвятила себя разработке и поддержке программы MySQL. С самого начала компания стала прибыльной за счет оказания платной поддержки, предоставления платных консультаций и продажи лицензий на встроенную версию MySQL. Это прекрасный пример того, что модель распространения программ с открытыми кодами является вполне жизнеспособной.

В июне 2000 г. программа MySQL стала доступна на условиях общей лицензии GNU (GNU General Public License, GPL). Это дает возможность каждому пользователю улучшать программу и передавать ее своим коллегам без каких-либо лицензионных
отчислений.

Рассмотрим работу с базами данных на примере автосалона. Кен, торговец автомобилями, владеет более чем 100 машинами. Естественно, Кен не может помнить детальное описание каждой из них, поэтому он решает создать базу данных. В ней будет содержаться таблица с описанием каждого автомобиля, включая производителя, модель, год выпуска и ряд других параметров. В США у каждого автомобиля есть уникальный идентификационный номер (VIN, Vehicle Identification Number). Он также занесен в таблицу, чтобы можно было различать модели с одинаковыми параметрами.

СУБД

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

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

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

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

Язык баз данных

MySQL взаимодействует с базой данных на языке, называемом SQL (Structured Query Language — язык структурированных запросов). Одни люди

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

MySQL. Они заявляют, что название программы должно произноситься так: "май-эскюэль".

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

CREATE TABLE car ( VIN VARCHAR(17) NOT NULL, Make VARCHAR(16) NOT NULL, Model VARCHAR(16) NOT NULL, ModelYear INT(16) NOT NULL, WholesalePrice FLOAT(6,2) NOT NULL, Color VARCHAR(S) NOT NULL, Mileage INT (11) NOT NULL, Comments TEXT, PRIMARY KEY(VIN));

С этой командой стоит познакомиться поближе. После названия команды CREATE TABLE указано имя таблицы: саr. Далее в фигурных скобках идет список разделенных запятыми строк, описывающих поля таблицы. Первое поле называется VIN и его тип — VARCHAR, т.е. строка символов переменной длины. Максимальное число символов в строке — 17. Спецификатор NOT NULL говорит о том, что строка не может быть пустой, т.е. пользователь обязательно должен ввести в эту строку какие-то данные. Некоторые поля имеют другой тип. Например, поле WholesalePrice содержит число с плавающей запятой. Формат этого числа таков: шесть цифр до запятой, и две — после. Поле ModelYear содержит целое число, состоящее не более чем из четырех цифр. Последняя строка списка представляет собой определение не поля, а индекса. В ней сообщается о том, что поле VIN является первичным ключом таблицы. Как уже говорилось выше, идентификационный номер автомобиля должен быть уникальным. А чтобы гарантировать уникальность значений в столбце, его нужно сделать первичным ключом. MySQL не позволит вставить в таблицу две записи с одинаковым значением поля VIN.

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

На языке баз данных команды, обращающиеся к базе, называются инструкциями либо запросами. Инструкция - это более общий термин. Запросом обычно считается такая инструкция, которая возвращает информацию. Запрос можно рассматривать как вопрос, задаваемый базе данных, например: "Существуют ли записи, в которых цве т автомобиля указан белым?" Если такие записи имеются, они будут выданы в виде результатов запроса.

Следующий запрос, представляет собой инструкцию SELECT. Она отбирает записи, соответствующие следующему критерию: поле Color записи содержит строку 'White'. Но возвращается не вся запись целиком, а лишь четыре поля: VIN, Make, Model и ModelYear.


SELECT VIN, Make, Model, ModelYear FROM car WHERE Color = 'White';


Обратите внимание на то, что инструкция SELECT напоминает предложение, записанное по-английски. Такова особенность языков четвертого поколения, к которым относится и SQL. Показанный выше запрос можно модифицировать как угодно, но результат пока что будет одним и тем же. СУБД не найдет ни одной записи, так как таблица пуста! Следовательно, нужно что-то добавить в неё. Для этого предназначена инструкция INSERT. Данная инструкция относится к семейству запросов на изменение и официально называется запросом на добавление записей:

INSERT INTO car VALUES ( '12345678901234567', 'Plymouth', 'Roadrunner', 1969, 5500.00, 'Blue', 148123, 'Unrestored' );

Такие инструкции должны быть выполнены для всех автомобилей, находящихся в распоряжении Кена. Имея заполненную таблицу, Кен может производить в ней более предметный поиск. Например, если клиент спросит, есть ли в продаже автомобили "Форд" по цене меньше $10000, Кен сможет проверить это с помощью показанного ниже запроса:

SELECT * FROM car WHERE Make = 'Ford' AND WholesalePrice < 9000.00;

Звездочка (*) означает выборку всех полей Записи. Кен рассчитывает заработать на продаже каждого автомобиля не менее 1000 долларов, поэтому в запросе фигурирует откорректированная цена. Просматривая записи, Кен обнаруживает, что у одного из автомобилей неправильно указан цвет. Для исправления записи нужно ввести инструкцию UPDATE, называемую запросом на обновление записей. Кен запоминает идентификатор автомобиля и вводит следующий запрос:


UPDATE car SET Color = 'White' WHERE VIN = '10203040506070809';


Как и в инструкции SELECT, предложение WHERE ограничивает круг записей, с которыми имеет дело инструкция. В данном случае это одна запись,

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

DELETE FROM car WHERE VIN IN ('12345678901234567', '10203040506070809');

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

Абстракция

Работая с таблицей саr, Кен вскоре обнаруживает проблему. Дело в Том, что в поле Color хранится текстовое название цвета, вводимое пользователем. Во-первых, утомительно вводить все время одни и те же названия, во-вторых, легко можно допустить ошибку в написании. Нужно придумать лучшую организацию таблицы.
В таблицах баз данных можно хранить не только скалярные значения, но и абстрактные указатели на другие таблицы. Кен находит выход: присвоить каждому цвету номер. Для этого нужно создать еще одну таблицу с двумя полями: в одном хранится код цвета, во втором — его название:

CREATE TABLE car_color ( ColorCode INT(6) NOT NULL AUTO_INCREMENT, Name VARCHAR(16), PRIMARY KEY(ColorCode) );

Номер цвета является целым числом, а столбец ColorCode — первичным ключом таблицы. Кен не хочет самостоятельно назначать эти номера, поэтому он возлагает данную задачу на СУБД, помечая поле ColorCode ключевым словом AUTO_INCREMENT. При добавлении очередной записи в таблицу car_color MySQL автоматически запишет в это поле номер, на единицу больший предыдущего.
Для начала необходимо сформировать запрос к таблице саr, чтобы получить список имеющихся названий цветов:

SELECT DISTINCT Color FROM car;

Ключевое слово DISTINCT заставляет MySQL удалить из таблицы результатов дублирующиеся значения. Теперь можно ввести серию запросов, вставляющих записи в таблицу car_color по одной за раз. Но это очень неуклюжий подход. Более эффективное решение — объединить инструкции INSERT и SELECT, создав подчиненный запрос. Результаты инструкции SELECT будут непосредственно вставляться в таблицу car_color:

INSERT INTO car_color (Name) SELECT DISTINCT Color FROM car;

После названия таблицы car_color в круглых скобках указан столбец, куда заносятся данные (Name). Обычно в пропущенные поля вставляется

специальная константа NULL, обозначающая отсутствующее значение. Но поле ColorCode помечено спецификатором NOT NULL, т.е. значения NULL в нем недопустимы. С другой стороны, в определении поля стоит ключевое слово AUTO_INCREMENT, а это означает, что в поле будут автоматически

вставляться целые числа: в первой записи это будет число 1, во второй — 2 и т.д.
На следующем этапе требуется перестроить таблицу саr, модифицировав определение столбца Color:

ALTER TABLE car CHANGE Color ColorCode INT(6) NOT NULL;

К сожалению, подобная модификация означает удаление всей информации из столбца Color. MySQL поменяет тип столбца, подставив во все поля

значение 0. Далее Кену придется ввести последовательность инструкций UPDATE, чтобы создать в таблице саr правильные ссылки на новую таблицу car_color. После обновления таблицы саr в ней будут храниться не названия цветов, а их коды (в поле ColorCode). Белый цвет будет иметь, к примеру, код 1, а темно-синий цвет — код 13. Запомнить соответствие между номерами и названиями цветов едва ли возможно. Необходимо, чтобы при выполнении запросов к таблице саr отображались именно названия цветов, а не их коды. Решение проблемы заключается в выполнении операции объединения (join) двух таблиц. Это особая разновидность инструкции SELECT, в которой каждая запись одной таблицы сравнивается по

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

объединение:

SELECT car.VIN, car_color.Name FROM car LEFT JOIN car_color ON car.ColorCode = car_color.ColorCode WHERE car.Make = 'Plymouth'

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

1) Каждая запись таблицы саr сравнивается с каждой записью таблицы car_color.

2) Если поле ColorCode таблицы саr совпадает с полем ColorCode таблицы car_color (объединение по равенству), создается итоговая запись,

состоящая из полей первой таблицы, к которым присоединены поля второй таблицы.

3) Для каждой записи таблицы саr, полю ColorCode которой не найдено соответствие в таблице car_color, создается итоговая запись, состоящая из

полей первой таблицы, к которым вместо полей второй таблицы присоединены значения NULL (левое объединение).

4) Из объединенной таблицы отбираются записи, соответствующие условию WHERE.

5) В результаты запроса включаются поля, заданные в предложении SELECT.

Между таблицами саr и car_color нет отношения "один к одному", так как может быть несколько автомобилей одинакового цвета. При ссылке на поля таблиц следует избегать неоднозначности. Например, обе таблицы содержат поле ColorCode. Чтобы явно указать, к какой таблице относится поле, нужно задать полное имя поля. Синтаксис полного имени таков: имя_таблицы.имя_поля.
Опубликовал Kest October 27 2008 12:42:44 · 2 Комментариев · 13538 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
вася July 27 2010 14:14:47
цвет по английски - Colour!
тоже вася November 15 2011 14:11:15
слишишь вася чё переводчиком ся возомнил? всё туть правильно написанно!!!!!smiley
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Динамические за...
Delphix Sample [И...
MpegPlay
XPcontrol
MiniTetris [Исход...
TrayComp
IconCut [Исходник...
Игра PackMan
Delphi Быстрый Ст...
Пользовательская...
GamesBase 3.0
PHP, MySQL и Drea...
ZipForge
Прграммирование в...
Трассировка прово...
Конвертирование и...
Шкрыль А. - Разра...
Игра змейка
39 статьи по Delphi
Доступа к БД Fire...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97829
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10290
Turbo Pascal fo... 7373
Калькулятор [Ис... 5981
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Сортировка простым...
13.3. Двоичное дер...
Уровни разработки
Геотермальная энер...
Сегодня ночью я сп...
Мечты сбываются в ...
Запоминание пути в...
Invalid function r...
1.3. ЧЕГО НЕТ В ЭТ...
Язык С: проверка т...
Файлы в языке C и C++
Эмуляция классов
Компания Технодина...
SAVEVALUE (СОХРАНИ...
Разработка сайтов
Выделение фрагмент...
Основные принципы ...
Главная или внутре...
Настройка приставк...
Коммуникация
О казино
Основные понятия с...
CN=Configuration, ...
состав группы, соб...
Что нужно сделать ...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?