MySQL имеет различные движки, основными из которых являются INNODB и MyISAM. MyISAM не поддерживает транзакции и ограничения внешнего ключа .Уровни изоляции схожи - в наши дни они кажутся относительно стандартными для баз данных.
Индексы
Индексы разные - MySQL имеет кластерные и некластеризованные индексы.Кластерные индексы обычно предназначены для первичного ключа, но не обязательно.Существует также ограничение на пространство для определения индексов - 767 для INNODB, 1000 для MyISAM .Поддерживающие индексы поддерживаются, не поддерживаются индексы на основе функций ...
Оптимизатор может использовать только один индекс на предложение SELECT - проверьте вывод EXPLAIN PLAN.Существует синтаксис для указания индекса, который будет использоваться, но это подсказка, и он все еще может игнорироваться оптимизатором.
Ограничения
MySQL имеет синтаксис ограничения CHECK, но никакой движок не применяет принудительноэто в настоящее время .Единственный вариант - использовать триггеры.Уникальные ограничения реализованы в MySQL как индексы.
Пользовательская обработка ошибок
Вам необходимо объявить обработчики для пользовательской обработки ошибок: http://dev.mysql.com/doc/refman/5.0/en/declare-handler.html
Ранее -
MySQL не делаетУ нас нет никакой поддержки для определения пользовательских ошибок, чтобы различать, скажем, целостность данных и ошибки бизнес-правил.
Аналитика / Ранжирование / WIndowing функциональность
MySQL не имеет таких функций - нет ROW_NUMBER, NTILE, RANK или DENSE_RANK.Вы можете создать функциональность psuedo, используя переменные - есть множество примеров на SO, если вы отметите теги «mysql», «rank».
Синтаксис WITH - Факторинг подзапроса
Это Другое дело, что MySQL не имеет .
Поддержка иерархических запросов
Как вы уже догадались - Нет рекурсивной поддержки иерархических запросов.Oracle имеет CONNECT BY начиная с версии v2 (!!), но стандарт ANSI заключается в использовании предложения WITH, как вы видите в SQL Server 2005 +.
Views
MySQL не поддерживает материализованные представления,поддержка представления ограничена - нельзя использовать подзапросы, например, .
PIVOT / UNPIVOT
Это стандартный синтаксис ANSI;Oracle начала поддержку в 11g, но MySQL снова не поддерживает это.Единственная опция - выражения CASE и агрегатные функции, которые остаются наиболее переносимым средством реализации этой функции (SQL Server 2005+ поддерживает PIVOT / UNPIVOT).
Sequence
MySQL не поддерживает последовательности,и самым близким является определение столбца INT как auto_increment.Это делает невероятно трудным использование одной и той же последовательности значений в двух или более таблицах (не то, что вам действительно нужно, если не нужно)Кроме того, только один столбец auto_increment может быть определен для каждой таблицы.Приращение и смещение в масштабе экземпляра - измените его, и вы включите каждый столбец auto_increment в каждой базе данных, которую обслуживает экземпляр.Сброс значения auto_increment требует привилегии ALTER TABLE;удаление / усечение данных не изменит текущего значения.
На этом замечании MySQL не поддерживает предложение RETURNING. Вам нужно использовать LAST_INSERT_ID()
, чтобы получить значение auto_increment для вновь созданной строки .
Типы данных
MySQL не имеет типа данных NUMBER - он разбивает числа на INT, MEDIUMINT и т. д. .В этом отношении MySQL очень похож на SQL Server. Тип данных MySQL TEXT (TINYTEXT, TEXT, MEDIUMTEXT и LONGTEXT) более приспособлен, чем ограничение 4000 в Oracle VARCHAR2.MySQL поддерживает CLOB и BLOB ...
Пакеты, хранимые процедуры, функции
MySQL поддерживает пользовательские функции и хранимые процедуры - мне еще не приходилось сталкиваться с базой данных, которая поддерживает нечто подобное пакетам Oracle.SQL Server имеет сборки CLR, но для этого требуется использовать код .NET CLR, а не собственный TSQL / PLSQL.