Mysql

Mysql  реляционная СУБД без излишеств (правда, в последней версии появились транзакции с помощью Berkley DB и INNOBASE), зато быстрая (для поиска и добавления, если предстоят частые изменения, то лучше поискать другую СУБД). Стандарты: entry level SQL92, ODBC levels 0-2.

Mysql - бесплатная СУБД

Лицензия - GPL/LGPL (но в случае извлечения прибыли от MySQL фирма - MySQL AB, Швеция - мягко намекает на оплату поддержки). Для хостинга лицензия не нужна, но клиенты должны иметь возможность убедиться, что все установлено правильно (предлагается давать доступ на чтение к установленным исходникам).

Написана на C и C++. Базовая платформа: Solaris 2.7-2.8, SuSE Linux 7.1 (ядро 2.4, ReiserFS), но работает также в AIX, BSDI, DEC Unix, FreeBSD, HP-UX, Linux 2.0, Mac OS X, NetBSD, OpenBSD, OS/2, SGI Irix, SunOS, SCO OpenServer, SCO UnixWare, Tru64, Win9x, NT, Win2000.

Многопотоковая. Первоначально мимикрировала под mSQL. API для C, C++, Java, Eiffel, Perl, PHP, Python, Tcl. ODBC. Парольная защита (пароли шифруются перед пересылке, это, однако, не увеличивает безопасность).

Таблицы в виде B-tree со сжатием индекса. До 32 индексов на таблицу. До 16 колонок на индекс. Длина индекса до 500 байт. Таблицы в памяти. Записи переменной длины. Есть примеры использования MySQL с 60000 таблиц и 5 миллиардами строк. Отсутствует memory leak (проверено Purify). Поддержка koi8-r и cp1251 (сортировка, сравнение и т.д.). Клиенты могут соединяться по TCP/IP (можно использовать только, если никто не подслушивает) или Unix socket. Можно встраивать в свои программы.

Стабильность подсистем: ISAM - стабильная, MyISAM - gamma, C API - стабильная (буфер до 16МБ), mysql(,admin,show,dump,import) - стабильные, Basic SQL - стабильная, оптимизатор - стабильная, блокировка (одновременный доступ нескольких процессов, не клиентов) - gamma (проблемы в Linux, рекомендуется --skip-locking), нити в Linux - рекомендуется --skip-locking и использовать не более 1000 одновременных соединений, DBD - стабильная, MyODBC - gamma, репликация - бета/gamma, BDB - бета (транзакции), автоматическое восстановление MyISAM - бета, слияние таблиц - бета/gamma, INNODB - альфа (транзакции с блокировкой на уровне строк), полнотекстовый поиск - бета.

Расширения к ANSI SQL92:

  • типы полей MEDIUMINT, SET, ENUM и различные модификации BLOB и TEXT
  • атрибуты полей: AUTO_INCREMENT, BINARY, NULL, UNSIGNED и ZEROFILL
  • по умолчанию строки сравниваются независимо от регистра
  • ключевые слова TEMPORARY и IF NOT EXISTS при создании/удалении таблиц
  • ключ DELAYED при создании/замене строк
  • ключ LOW_PRIORITY при манипуляции со строками
  • SHOW
  • строки можно заключать не только в апострофы, но и в кавычки
  • SET OPTION
  • синонимы операторов OR (||) и AND (&&) и MOD (%)
  • LAST_INSERT_ID()
  • REGEXP
  • IT_COUNT(), CASE, ELT(), FROM_DAYS(), FORMAT(), IF(), PASSWORD(), ENCRYPT(), md5(), ENCODE(), DECODE(), PERIOD_ADD(), PERIOD_DIFF(), TO_DAYS(), or WEEKDAY()
  • REPLACE вместо DELETE + INSERT
  • присвоение значений переменным в выражениях
  • комментарии в стиле C и sh
  • множество других мелких улучшений и несовместимостей, которые не позволят Вам "соскочить" с MySQL на другую СУБД

Отсутствующие возможности ANSI SQL92:

  • sub-select (в руководстве приводятся примеры как обойтись без него)
  • хранимые процедуры и тригеры (тригеры не планируются совсем)
  • FOREIGN KEY
  • views