
Історія виникнення MySql
MySQL виникла як спроба застосувати mSQL до власних розробок компанії: таблиць, для яких використовувалися ISAM — підпрограми низького рівня. У результаті був вироблений новий SQL-інтерфейс, але API-інтерфейс залишився в спадок від mSQL. Звідки походить назва «MySQL» — достеменно не відомо. Розробники дають два варіанти: або тому, що практично всі напрацювання компанії починалися з префікса My, або на честь дівчинки на ім'я My, дочки Майкла Монті Віденіуса, одного з розробників системи.
Логотип MySQL у вигляді дельфіна носить ім'я «Sakila». Він був обраний з великого списку запропонованих користувачами «імен дельфіна». Ім'я «Sakila» було відправлено Open Source-розробником Ambrose Twebaze
В січні-лютому 2008 Sun Microsystems придбала розробника системи керування базами данних MySQL за $1 млрд. Після поглинання у 2009 році Sun Microsystems компанією Oracle Corporation MySQL стала власністю Oracle.
Релізи та доповнення:
перший внутрішній випуск MySQL — 23 травня 1995
версія для систем Windows ((Windows 95 і NT))— 8 січня 1998
версія 3.23: бета від червня 2000, стабільний випуск у січні 2001
версія 4.0: бета від серпня 2002, стабільний випуск у березні 2003 (unions, query cache)
версія 4.1: бета від червня 2004, стабільний випуск у жовтні 2004 (r-trees, subqueries)
версія 5.0: бета від березня 2005, стабільний випуск у жовтні 2005 (cursors, stored procedures, triggers, views, XA transactions)
версія 5.1: розробка велась із листопада 2005, стабільний випуск в листопаді 2008
версія 5.4: бета в квітні 2009
версія 6.0: в розробці
MySQL 4.0
Не зважаючи на те, що версія 4.0 є застарілою, вона все ще має значне розповсюдження. Основні можливості цієї версії:
Практично повна реалізація ANSI SQL-99 разом з розширеннями.
Міжплатформенна сумісність.
Незалежні типи таблиць (MyISAM для швидкого читання, InnoDB для транзакцій і цілісності посилань).
Транзакції.
Підтримка SSL.
Кешування запитів.
Реплікація: один головний сервер на одного підлеглого, багато підлеглих на одного головного.
Повнотекстова індексація і пошук з використанням типу таблиць MyISAM.
Імплементована бібліотека бази даних.
Підтримка Юнікоду (UTF-8).
Таблиці InnoDB забезпечують відповідність вимогам ACID.
Вбудований сервер, який дозволяє включати MySQL в автономні додатки.
MySQL 4.1
Рекомендованою версією MySQL на 2005 рік є MySQL 4.1, яка вийшла 27 жовтня 2004 року. Вона містить такі нововведення:
Вкладені запити і похідні таблиці.
Нова система кодувань і сортувань.
Більш швидкий та гнучкий протокол клієнт-сервера із підтримкою підготовлених запитів, який забезпечує їх оптимальне виконання.
Нова програма установки та налаштування для Microsoft Windows і GNU/Linux.
Захищені через OpenSSL з'єднання між клієнтом та сервером.
Високо-оптимізована бібліотека, яка може бути використана в сторонніх програмах.
Повноцінна підтримка Юнікоду (UTF-8 і UCS2).
Стандартні просторові типи даних GIS для зберігання географічної інформації.
Покращений повнотекстовий пошук та система допомоги.
MySQL 5.0
Версія MySQL 5.0 вийшла 24 жовтня 2005 року, у цій версії була значно розширена функціональність, що ставить MySQL в один ряд із комерційними СУБД. Якщо ранішу СУБД MySQL звинувачували у недостатній підтримці стандарту SQL, то із появою п'ятої версії цієї популярної бази даних появилась практично повна підтримка стандарту SQL. MySQL 5.0 містить такі нововведення:
Збережувані процедури та функції.
Обробники помилок.
Курсори.
Тригери.
Представлення.
Інформаційна схема (так званий системний словник, що містить метадані).
MySQL 5.1
Версія MySQL 5.1 продовжує шлях до стандарту SQL:2003. MySQL 5.1 містить такі нововведення:
Сегментування — можливість розбити одну велику таблицю на декілька частин, розміщених в різних файлових системах, базуючись на визначеній користувачем функції. При деяких умовах це може дати серйозне збільшення продуктивності та, крім того, полегшує масштабування таблиць.
Змінено поведінку ряду операторів для забезпечення більшої сумісності зі стандартом SQL:2003.
Порядкова реплікація (row-based реплікація), при якій в бінарний лог буде записуватись тільки інформація про реально змінені рядки таблиці замість оригінального (і, можливо, більш повільного) тексту запиту.
Вбудований планувальник робіт, що періодично запускаються. По синтаксису додання задачі схоже на додання тригера до таблиці; по ідеології — на crontab.
Додатковий набір функцій для обробки XML, реалізація підтримки XPath.
Нові засоби діагностики проблем і утиліти для аналізу продуктивності. Розширено можливості з керування вмістом лог-файлів, логи тепер можуть бути збережені і в таблицях general_log і в slow_log. Утиліта mysqlslap дозволяє провести тестування навантаження БД із записом часу реакції на кожний запит.
Для спрощення операції оновлення підготовлена утиліта mysql_upgrade, яка виконає перевірку всіх існуючих таблиць на предмет сумісності з новою версією, і при необхідності виконає належні коригування.
MySQL Cluster тепер йде як окремий продукт, який базується на MySQL 5.1 і сховищі NDBCLUSTER.
Значні зміни в роботі MySQL Cluster, такі, як, наприклад, можливість зберігання табличних даних на диску.
Повернення до використання вбудованої бібліотеки libmysqld, відсутньої в MySQL 5.0.
API для плагінів, що дозволяє завантажувати сторонні модулі, які розширюють функціональність (наприклад, повнотекстовий пошук), без перезапуску сервера.
Реалізація парсера повнотекстового пошуку у вигляді plug-in.
Новий рушій таблиць Maria (стійкий до збоїв клон MyISAM), який у 2010 був перейменований на Aria та став основою форку MySQL від Монті Віденіуса під назвою MariaDB
MySQL 5.5
Гілка MySQL 5.5 містить ряд значних поліпшень, пов'язаних з підвищенням масштабованості та швидкодії, серед яких:
Використання за замовчуванням рушія InnoDB.
Підтримка напівсинхронного (semi-synchronous) механізму реплікації, заснованого на патчах до InnoDB від компанії Google.
Поліпшення функцій з партіціювання даних. Розширений синтаксис для розбиття великих таблиць на кілька частин, розміщених в різних файлових системах (partitioning). Додані операції RANGE, LIST і метод оптимізації «partition pruning».
Новий механізм оптимізації вкладених запитів та операцій JOIN.
Перероблена система внутрішніх блокувань.
Інтегровані патчі Google з оптимізацією роботи InnoDB на CPU з великою кількістю ядер.
Відомі користувачі
Apple — для динамічних сторінок на Apple.com, для багатьох внутрішніх проектів
Amazon.com — для багатьох внутрішніх проектів
Cox Communications — четвертий за розміром провайдер кабельного телебачення в США, має понад 3,600 таблиць та 2 мільярди рядків даних у базах і виконує приблизно 2 мільйони вставок на годину.
Digg.
flickr
Google — для програми AdWords пошукового рушія
LiveJournal — приблизно 300 мільйонів переглядів сторінок на день
MediaWiki і Вікіпедія
NASA — конвертувала базовану на Oracle систему закупок на MySQL
Nokia
Yahoo!
Практична частина
Функції PHP для роботи з MySQL
З'єднання з сервером MySQL
Основною функцією для з'єднання з сервером MySQL є mysql_connect (), яка підключає скрипт до сервера баз даних MySQL та виконується авторизацію користувача базою даних. Синтаксис у даної функції такий:
mysql_connect ([string $hostname] [, string $user] [, sting $password]); |
Всі параметри даної функції є необов'язковими, оскільки значення за замовчуванням можна прописати у файлі конфігурації php.ini. Якщо ви хочете вказати інші імена MySQL-хоста, користувача і пароль, ви завжди можете це зробити. Параметр $hostname може бути вказаний у вигляді: хост: порт. Функція повертає ідентифікатор (типу int) з'єднання, вся дальнейщая робота здійснюється тільки через цей ідентифікатор. При наступному виконанні функції mysql_connect () з тими ж параметрами нове з'єднання не буде відкрито, а функція поверне ідентифікатор існуючого з'єднання.
Для закриття з'єднання призначена функція mysql_close (int $ connection_id). Взагалі, підключення можна і не закривати - воно буде закрито автоматично по завершенні роботи PHP скрипта. Однак, це поганий стиль. Якщо кількість з'єднань більше одного, вказується ідентифікатор $ connection_id того з'єднання, яке необхідно закрити.
Функція mysql_connect () встановлює звичайне з'єднання з MySQL. Однак, PHP підтримує постійні з'єднання - для цього використовують функцію mysql_pconnect (). Аргументи цієї функції такі ж, як і у mysql_connect (). Різниця між постійним і простим з'єднанням в тому, що постійне з'єднання не закривається після завершення роботи скрипта, навіть якщо скрипт викликав функцію mysql_close ().
Функція вибору бази даних
Функція mysql_select_db (string $ db [, int $ id]) обирає базу даних, з якою буде працювати PHP скрипт. Якщо відкрито не більше одного з'єднання, можна не вказувати параметр $ id.
Наприклад: Спроба встановити з'єднання з MySQL:
if (!mysql_connect($server, $user, $ password)) { echo "Ошибка подключения к серверу MySQL"; exit; } // Если соединились, выбираем базу данных: mysql_select_db($db); |
Вибір кодування символів для з'єднання
Кодування символьних полів у базі MySQL даних повинна збігатися з кодуванням з'єднання. Тому для надійності слід відразу після підключення до MySQL виконати запит
mysql_query("SET NAMES cp1251"); |
або
mysql_query("SET CHARACTER SET utf8"); |
Для кирилиці придатними кодуваннями є utf8, koi8, cp1251, cp886.
Використовуйте кодування, яка підходить для мови даних, щоб забезпечити правильний пошук і сортування рядків.
Функції обробки помилок
Якщо відбудеться помилка з'єднання з MySQL, то ви отримаєте відповідне повідомлення і скрипт завершить свою роботу. Це не завжди буває зручно, перш за все, при налагодженні скриптів. Тому, в PHP є наступні дві функції:
mysql_errno(int $id); mysql_error(int $id); |
Перша функція повертає номер помилки, а друга - повідомлення про помилку. У результаті ми можемо використовувати наступне:
echo "ERROR ".mysql_errno()." ".mysql_error()."\n"; |
Тепер буде ясно, через що сталася помилка - ми побачимо відповідним чином оформлене повідомлення.
Функція виконання запитів до сервера баз даних
Всі запити до поточної базі даних відправляються функцією mysql_query (). Цієї функції потрібно передати один параметр - текст запиту. Текст запиту модет містити пробільні символи і символи нового рядка (\ n). Текст повинен бути складений за правилами синтаксису SQL.
Приклади запитів:
Створення власної таблиці:
mysql_query("CREATE TABLE my_table(word VARCHAR(50), qid INT))" |
Наступний запит повертає запис з таблиці mytable.
$q = mysql_query("SELECT * FROM my_table"); |
Результат запиту присвоюється змінної $ q. Результат - це набір даних, який після виконання запиту потрібно обробити певним чином.
Також використовують mysql_query () з SQL-запитом створення бази даних SQL CREATE DATABASE. Це краще, ніж використання функції створення бази даних mysql_create_db (), яка взагалі не рекомендується до використання і недоступна в бібліотеці для MySQL версій 4.x.