1 MySQL, MySQL AB и Open Source
MySQL представляет собой очень популярную систему управления базами данных
с открытыми исходными текстами, разрабатываемую MySQL AB. MySQL AB является
коммерческой компанией, строящей свой бизнес на сервисах, сосредоточенных на
базе данных MySQL. Подробности в разделе
«1.1.2 Что такое MySQL AB».
MySQL представляет собой систему управления базами данных.
Базой данных называют структурированный набор данных. Это может быть чем
угодно: от простого перечня покупок до галереи изображений. Чтобы добавлять,
обращаться и обрабатывать данные, сохраненные в компьютерной базе данных, Вы
нуждаетесь в системе управления базы данных, типа MySQL. Так как компьютеры
очень хороши при обработке больших количеств данных, базы данных играют
центральную роль в вычислениях, как автономные утилиты, или как части других
пакетов прикладных программ.
MySQL является реляционной СУБД.
Реляционная база данных сохраняет данные в отдельных таблицах. Это
добавляет быстродействие и гибкость. Таблицы связаны определенными
отношениями, делающими возможным объединить данные из нескольких таблиц в
одном запросе. SQL-часть MySQL ориентирована на Structured Query Language,
наиболее общий стандартизированный язык, используемый, чтобы обратиться к
компьютерным базам данных.
MySQL является Open Source Software.
Почему используют MySQL?
MySQL очень быстр, надежен и легок в использовании. Если это то, что Вы
ищете, Вы должны попробовать его. MySQL также имеет очень практичный набор
свойств, разработанных в очень близком сотрудничестве с пользователями. Вы
можете найти сравнение эффективности MySQL с некоторыми другими
администраторами баз данных на странице эталонных тестов. Подробности в
разделе «14.1.4 Пакет тестов MySQL
Benchmark Suite». MySQL был первоначально разработан, чтобы обработать
очень большие базы данных намного быстрее, чем существующие решения, и
успешно использовался в высокотребовательных промышленных средах в течение
нескольких лет. При постоянной разработке MySQL сегодня предлагает богатый и
очень полезный набор функций. Связность, быстродействие и защита делают MySQL
очень подходящим для обращения к базам данных из Internet.
Технические возможности MySQL.
За подробностями отсылаю Вас к разделу «9
Обзор языка MySQL». MySQL является системой «клиент-сервер», состоящей из
многопоточного SQL-сервера, который поддерживает различные функции,
нескольких различных клиентских программ и библиотек, административных
инструментальных средств и нескольких интерфейсов программирования.
MySQL имеет много дополнительных программ.
Вероятно, Вы обнаружите, что Ваша любимая прикладная программа или язык
программирования уже поддерживает MySQL.
Официально
MySQL произносится как «Май-Эс-Ку-Эль», а не как MY-SEQUEL.
2 Что такое MySQL AB?
MySQL AB является шведской компанией, которая владеет правами на исходные
тексты сервера и марку MySQL. Она занимается разработкой, распространением и
поддержкой пакета MySQL.
MySQL AB имеет в настоящее время свыше 20 разработчиков
(
http://www.mysql.com/development/team.html) в платежной ведомости, и это
число возрастает быстро.
Основные источники дохода:
Авторы пакета хотят, чтобы MySQL всегда был:
- Самой лучшей и наиболее используемой базой данных в мире.
- Доступным для всех.
- Легким в использовании, насколько это возможно для такого пакета.
- Непрерывно улучшаемым при дальнейшем пребывании быстрым и безопасным.
- Свободным от ошибок.
MySQL AB и команда MySQL AB:
- Продвигает в массы философию Open Source (открытых исходных текстов)
и поддерживает все сообщество разработчиков Open Source Community. - Предпочитает партнеров, которые совместно используют знания.
- Отвечают на почту и оказывает поддержку.
- Является виртуальной компанией, работающей в основном по сети.
- Выступает против программных патентов.
3 История MySQL
Началось все с попыток добавить к mSQL драйвер низкого уровня
для связи с только что разработанным форматом таблиц (ISAM). Однако, после
вдумчивого тестирования, было установлено, что mSQL недостаточно
быстр и гибок для этого дела. Это закончилось созданием нового интерфейса SQL
к нашей базе данных, но почти с тем же самым интерфейсом API, что и у
mSQL. Этот API был выбран, чтобы облегчить перенос кодов для
других разработчиков программ.
Название возникло из сокращения (а вернее, слияния) слов My SQL, что на
английском языке значит «мой SQL». Названию около десяти лет, оно прижилось
еще в те времена, когда пакет не был коммерческой разработкой.
4 Основные возможности MySQL
Следующий перечень описывает наиболее важные возможности MySQL:
5 Насколько стабилен MySQL?
Этот раздел сводится к вопросам о том, насколько можно доверять пакету, и
сколько шансов, что он разнесет на кусочки важный проект, зависящий от него.
Строго говоря, MySQL очень надежен.
Попробую разъяснить некоторые проблемы и ответить на некоторые из наиболее
важных вопросов, которые, кажется, касаются многих. Этот раздел был собран из
информации, собранной из списка рассылки (который является очень активным по
части сообщений об ошибках и сбоях).
В TcX MySQL работал без любых проблем в проектах, начиная с середины 1996.
Когда MySQL был выпущен на публику, авторы отметили, что имелись некоторые
части непроверенного кода, которые были быстро найдены новыми пользователями,
делавшими запросы иными способами, чем авторы. Каждый новый выпуск имел
меньшее количество проблем мобильности, чем предыдущий (даже при том, что
каждый имел много новых свойств).
Каждый выпуск MySQL был пригоден для использования, и имелись проблемы
только, когда пользователи начинали использовать код из серых зон.
Естественно, пользователи снаружи не видят то, чем являются серые зоны, этот
раздел пытается указать, которые зоны в настоящее время известны. Описания
имеют дело с MySQL Version 3.23. Все известные и сообщенные ошибки
выправлены в последней версии, за исключением ошибок, перечисленных в
отдельном разделе, которые являются проблемами, связанными с проектом.
Подробности в разделе «1.2.7
Известные ошибки и проблемы».
MySQL написан на нескольких уровнях и различных независимых модулях. Эти
модули перечислены ниже с индикацией относительно того, как хорошо проверен
каждый из них (сравните с MS SQL Server!):
Драйвер ISAM-таблиц: стабилен.
Это управляет хранением и поиском всех данных в MySQL Version 3.22 и
ранее. Во всех выпусках MySQL не имелось сообщений об ошибках в этом коде.
Единственный известный способ получить разрушенную таблицу состоит в том,
чтобы уничтожить сервер в середине модификации. Даже это вряд ли уничтожит
любые данные потому, что все данные сбрасываются на диск между запросами. Не
было отчетов об ошибках относительно потерянных данных из-за ошибок в MySQL.
Драйвер MyISAM-таблиц: стабилен.
Это ноовведение MySQL Version 3.23. Это в значительной степени основано
на коде ISAM-таблиц, но имеет много новых и очень полезных свойств.
Лексический анализатор и обработчик команд: стабильны.
Не было сообщений об ошибках в этой системе в течение длительного времени.
Клиентский код на C: стабилен.
Никаких известных проблем. До Version 3.20 имелись некоторые ограничения
в размере буферов передачи/приема. Начиная с Version 3.21, буферный размер
теперь динамически меняется до значения по умолчанию в 16M.
Стандартные клиентские программы: стабильны.
Поддержка SQL: стабильна.
Базисная система функций SQL, классы строк и динамическая обработка
памяти. Ни одной сообщенной ошибки в этой системе.
Оптимизатор запросов: стабилен.
Оптимизатор диапазонов: стабилен.
Оптимизатор объединений: стабилен.
Блокировки: пока Gamma.
Это очень зависит от системы. На некоторых системах имеются большие
проблемы при использовании стандарта блокировки OS (fcntl()). В
этих случаях Вы должны выполнить MySQL с опцией —skip-locking.
Проблемы, как известно, происходят на некоторых Linux-системах и на SunOS при
использовании файловых систем по NFS.
Linux threads: стабильно.
Главная найденная проблема была с обращением fcntl(),
которое исправлено, используя опцию —skip-locking для
mysqld. Некоторые пользователи сообщали о проблемах тупика в
Version 0.5. LinuxThreads должен быть перетранслирован, если Вы планируете
использовать свыше 1000 параллельных подключений. Хотя можно выполнить много
подключений с LinuxThreads по умолчанию (однако, Вы никогда не будете иметь
более, чем 1021 подключение), заданный по умолчанию лимит стека в 2 МБ делает
прикладную программу ненадежной, и она способна свалиться в дамп ядра после
создания 1021 неактивных подключений.
Solaris 2.5+ pthreads: стабильно.
Мы используем это для всей нашей промышленной работы.
MIT-pthreads (прочие системы): стабильно.
Не имелось никаких сообщенных ошибок, начиная с Version 3.20.15, и
никаких известных авторам (почувствуйте разницу!) ошибок, начиная с Version
3.20.16. На некоторых системах имеется сильное замедление операций (до 1/20
секунды бездействия между каждыми двумя запросами). Конечно, MIT-pthreads
может все немного замедлять, но индексные инструкции SELECT
обычно выполняются в одном пакете.
Другие реализации потоков: Beta-Gamma.
Версии для других систем все еще очень новые и могут иметь ошибки,
возможно, в MySQL, но наиболее часто непосредственно в реализации потоков.
Некоторые люди думали, что они нашли ошибки здесь, но они обычно просто
не поняли ситуацию. Пожалуйста, внимательно проверьте руководство перед тем,
как сообщать о возникших проблемах!
ALTER TABLE: стабильно.
MyODBC (используется ODBC SDK 2.5): Gamma.
Это, кажется, уже работает хорошо с некоторыми программами.
Авторы все еще работают над репликацией, так что не ожидайте, что это
будет твердой скалой. С другой стороны, некоторые пользователи MySQL уже
вовсю применяют это свойство с очень хорошими результатами.
Таблицы BDB: Beta.
Код Berkeley DB сам по себе очень устойчив, но разработчики пакета все
еще улучшают интерфейс между MySQL и таблицами BDB, так что будет требоваться
некоторое время прежде, чем все будет надежно.
Таблицы InnoDB: Beta.
Это недавнее добавление к MySQL. Они работают хорошо и
могут использоваться после начального тестирования.
Автоматический ремонт таблиц MyISAM: Beta.
Это воздействует только на новый код, который проверяет, была ли таблица
закрыта правильно, и выполняет автоматическую проверку/ремонт таблицы, если
это не так.
Таблицы MERGE: Beta/Gamma.
Использование ключей на таблицах MERGE все еще не
оттестировано как следует. Другая часть кода MERGE проверена.
Текстовый поиск работает, но все еще не используется широко.
MySQL AB обеспечивает поддержку по электронной почте для покупателей
соответствующей услуги, но список рассылки MySQL обычно обеспечивает ответы
на общие вопросы. Ошибки обычно исправляются сразу же с помощью патча, для
серьезных ошибок почти всегда имеется новый выпуск.
6 Насколько большими могут быть таблицы MySQL?
MySQL Version 3.22 имеет лимит в 4G на размер таблицы. С новым кодом
MyISAM в MySQL Version 3.23 максимальный размер таблицы увеличен
до 8 миллионов терабайт (2^63 байт).
Обратите внимание, однако, что операционные системы имеют их собственные
ограничения размера файла. Имеются некоторые примеры:
В Linux 2.2 Вы можете получать таблицы больше, чем 2G, используя заплату
LFS для файловой системы ext2. В Linux 2.4 существует также заплата для
ReiserFS, чтобы получить поддержку для больших файлов.
Это означает, что размер таблицы для MySQL обычно ограничивается
операционной системой, а не самим пакетом.
По умолчанию таблицы MySQL имеют максимальный размер около 4G. Вы можете
проверять максимальный размер таблицы для каждой конкретной таблицы с помощью
команды SHOW TABLE STATUS или утилитой myisamchk -dv
table_name. Подробности приведены в разделе
«4.10 Синтаксис вызова SHOW».
Если Вы нуждаетесь в таблицах, больших, чем 4G (и Ваша операционная
система поддерживает это), Вы должны установить параметры
AVG_ROW_LENGTH и MAX_ROWS, когда Вы создаете Вашу
таблицу. Подробности в разделе «7.3
Синтаксис CREATE TABLE». Вы можете установить их и позже с
помощью ALTER TABLE. Подробности в разделе
«7.4 Синтаксис ALTER TABLE
«.
Если Ваша большая таблица нужна только для чтения, Вы могли бы
использовать myisampack, чтобы объединить и сжать много таблиц в
одну. Утилита myisampack обычно сжимает таблицу по крайней мере
на 50%, так что Вы можете иметь намного большие таблицы.
Вы можете обойти ограничения размера файла операционной системы для
файлов данных MyISAM, используя опцию RAID.
Подробности в разделе «7.3 Синтаксис
CREATE TABLE».
Другое решение может быть реализовано с помощью библиотеки MERGE, которая
позволяет Вам обрабатывать совокупность идентичных
таблиц как одну.
7 Совместимость с проблемой 2000
- MySQL использует Unix-функции времени и не имеет никаких проблем с
датами до 2069. Все годы с 2 цифрами расценены в интервале от
1970 до 2069, это означает, что, если Вы сохраняете
01 в столбце типа year, MySQL обрабатывает это как
2001. - Все функции даты в MySQL сохранены в одном файле sql/time.cc и
кодированы очень тщательно, чтобы быть абсолютно 2000-безопасными. - В MySQL Version 3.22 и позже новый тип столбца YEAR может
сохранять годы 0 и в интервале от 1901 до
2155 в 1 байте, а также отображать их, используя 2 или 4 цифры.
К сожалению, эти проблемы могут быть трудными в исправлении потому, что
различные прикладные программы могут быть написаны различными программистами,
каждый из которых может использовать различный набор соглашений и
обрабатывающих даты функций.
Имеется простой пример, иллюстрирующий, что MySQL не имеет любых проблем с
датами до года 2030:
Это показывает, что типы DATE и DATETIME не
будут давать никаких проблем с будущими датами (они легко обрабатывают даты
вообще до 9999 года).
Тип TIMESTAMP, который используется, чтобы сохранить текущее
(актуальное) время, имеет диапазон только до 2030-01-01.
TIMESTAMP имеет диапазон от 1970 до
2030 на 32-разрядных машинах (значение со знаком). На
64-разрядных машинах это обрабатывает времена до 2106 года
(значение без знака).
Даже при том, что MySQL Y2K-совместим, Вы отвечаете за то, чтобы
обеспечить однозначный ввод. Подробности в разделе
«5.2.1 Проблема Y2K и типы Date», там
описаны правила MySQL для ввода дат с неоднозначными данными (данные,
содержащие значения года с 2 цифрами).
MySQL benefits
MySQL is fast, reliable, scalable, and easy to use. It was originally developed to handle large databases
quickly and has been used in highly demanding production environments for many years.
Although MySQL is under constant development, it offers a rich and useful set of functions. MySQL’s
connectivity, speed, and security make it highly suited for accessing databases on the internet.
MySQL’s key benefits include
Ease of use: Developers can install MySQL in minutes, and the database is easy to manage.
Performance: MySQL HeatWave is faster and less expensive than other database services, as demonstrated by
multiple standard industry benchmarks, including TPC-H, TPC-DS, and CH-benCHmark.
High availability: MySQL delivers a complete set of native, fully integrated replication
technologies for high availability and disaster recovery. For business-critical applications, and to meet
service-level agreement commitments, customers can achieve
Security: Data security entails protection and compliance with industry and
government regulations, including the European Union General Data Protection Regulation, the Payment Card
Industry Data Security Standard, the Health Insurance Portability and Accountability Act, and the Defense
Information Systems Agency’s Security Technical Implementation Guides. MySQL Enterprise Edition provides
advanced security features, including authentication/authorization, transparent data encryption, auditing,
data masking, and a database firewall.
MySQL works in client/server or embedded systems
Связи между таблицами показывают, как одни сведения могут влиять на другие. В зависимости от того, как пользователь настроит связь, БД выдает разные результаты. В связи может участвовать как одна, так и сразу множество записей.
Этот простейший вид связи говорит, что одной записи из данной таблицы соответствует только одна запись из другой таблицы. Например, если сделать таблицу с характеристиками товара, то каждой характеристике будет соответствовать только один товар. И наоборот.
Эта связь работает, если, например, у вас есть таблица с покупателями и таблица с купленными ими в разное время товарами. Одной записи о покупателе будут соответствовать несколько записей о его приобретениях. Таким образом, мы быстро найдем все покупки одного клиента. Еще более простой пример — писатели и книги. Каждая книга написана только одним конкретным автором, но у одного автора может быть несколько изданных книг.
Это более хитрая связь, для которой требуется отдельная таблица — промежуточная. В ней соединяются данные из одной таблицы с данными из другой. Выходит, что в этой таблице самих данных нет, но есть связи. Пример: вы записываете в смартфоне список важных дел, отмечая каждое дело определенной пометкой.

Каждая пометка позволяет быстро определиться, что за дело вам предстоит выполнить: «сделать на этой неделе», «написать письмо», «утвердить у шефа», «покупки» и т. д. Каждой задаче допустимо присвоить как одну, так и несколько пометок, а одна пометка может соответствовать нескольким задачам. То есть вы создали связь множества пометок с множеством задач, после чего легко найдете одно через другое.

