Различия между MySQL и SQL Server [закрыто]

144

Я разработчик ASP.NET, который использовал Microsoft SQL Serverдля всех моих потребностей базы данных (как на работе, так и для личных проектов).

Я подумываю опробовать стек LAMP для некоторых моих личных проектов.

Каковы некоторые из основных различий между MySQLи SQL Server? Является ли использование хранимых процедур обычной практикой MySQL?

Какой совет или ресурсы вы бы порекомендовали, чтобы помочь мне с переключателем?

Для тех, кто имеет опыт работы с обоими, есть ли какие-то недостающие функции от MySQL?

sestocker
источник

Ответы:

139

Одна вещь, на которую вы должны обратить внимание - это довольно серьезные различия в том, как SQL Server и MySQL реализуют синтаксис SQL.

Вот хорошее сравнение различных реализаций SQL .

Например, взгляните на раздел top-n. В MySQL:

SELECT age
FROM person
ORDER BY age ASC
LIMIT 1 OFFSET 2

В SQL Server (T-SQL):

SELECT TOP 3 WITH TIES *
FROM person
ORDER BY age ASC
Джефф Этвуд
источник
27
и oracle тоже отличается: выберите * from (выберите возраст от человека, упорядоченный по возрасту назад asc), где rownum <= 3 Вернись ANSI SQL, все прощено :)
gbjbaanb
9
Просто наткнулся на это. Чтение обо всех различиях заставляет меня съеживаться. Основы одинаковы (по крайней мере, с точки зрения понимания), но особенности очень и очень разные.
JasCav
21
может быть, глупый комментарий, но почему не может быть языка 1 sql ?? ... есть другой HTML ?? ... так почему бы не 1 sql.
GreatKing
4
@greaterKing HTML является заданной структурой и стандартом комитета / консорциума, а SQL - нет, это всего лишь язык сценариев, и единственным владельцем является разработчик интерпретатора. В некотором смысле это похоже на Javascript, каждый браузер имеет свой собственный движок JS и свой собственный способ интерпретации скрипта. Только благодаря явному давлению со стороны сообщества предпринимаются попытки привести этот язык к какой-то солидарности. Но,
боже, как
2
T-SQL переводится на Transact-SQL;) Sql Server включает язык (T-SQL), но это программное обеспечение в целом, с графическим интерфейсом, обработкой запросов локально и через сеть и т. Д.
Botond Bertalan
48

Многие комментарии здесь звучат скорее как религиозные аргументы, чем как заявления из реальной жизни. Я работал в течение многих лет с MySQL и MSSQL, и оба являются хорошими продуктами. Я бы выбрал MySQL в основном на основе среды, в которой вы работаете. Большинство проектов с открытым исходным кодом используют MySQL, поэтому, если вы идете в этом направлении, MySQL - ваш выбор. Если вы разрабатываете что-то с .Net, я бы выбрал MSSQL не потому, что это намного лучше, а просто потому, что это то, что использует большинство людей. Я на самом деле в настоящее время в проекте, который использует ASP.NET с MySQL и C #. Работает отлично.

Remy
источник
3
Строго говоря, вы не думаете, что нет ничего похожего на MS SQL. То, что существует, это «MS SQL Server».
Нерушимый
Я уверен, что вы знаете больше, чем я. Я только новичок, пожалуйста, дайте мне знать, если я ошибаюсь? Есть ли что-нибудь точное, как MS SQL?
Нерушимый
2
Я не уверен, что вы спрашиваете?
Реми
3
Это верно. Microsoft SQL Server 2012 или любую другую версию, которую вы используете.
Реми
5
В наши дни программирование - это аббревиатуры. Давайте возьмем пример того, как вы говорите о Lamp Stack. Многие люди, вероятно, просто скажут LAMP или WAMP. Аналогично, вместо того, чтобы говорить «Microsoft SQL Server», мы сделали его «MS SQL Server», «MS SQL - MSSQL»
ytpillai,
23

Я не могу поверить, что никто не упомянул, что MySQL не поддерживает выражения Common Table Expressions (CTE) / «with». Это довольно раздражающая разница.

Ely
источник
Я использовал как CTE, так и таблицы временных / переменных. Какая польза от использования CTE по сравнению с двумя последними?
Джаред
8
@Jared Использование CTE делает код читаемым, потому что вам не нужно определять временную таблицу и ее типы столбцов, а с помощью cte вы даже получаете intellisense для типа и имени столбца, даже если вы их не указали.
Алекс
9
Рекурсия - одно из преимуществ, о котором нужно упомянуть.
Faiz
2
Mysql 8 поддерживает CTE
Ivanzinho
Так что MySQL теперь также получает синтаксическую конфету.
TheLegendaryCopyCoder
15

MySQL, скорее всего, будет иметь проблемы с повреждением базы данных, и он не устраняет их автоматически, когда они случаются. Я работал с MSSQL начиная с версии 6.5 и не помню, чтобы проблема с повреждением базы данных переводила базу данных в автономный режим. Несколько раз, когда я работал с MySQL в производственной среде, проблема с повреждением базы данных переводила всю базу данных в автономный режим, пока мы не запустили волшебную вещь «пожалуйста, исправьте мой поврежденный индекс» из командной строки.

Система транзакций и журналирования MSSQL, по моему опыту, обрабатывает практически все - включая цикл питания или аппаратный сбой - без повреждения базы данных, и, если что-то портится, исправляется автоматически.

Это был мой опыт, и я был бы рад услышать, что это исправлено или мы что-то делали не так.

http://dev.mysql.com/doc/refman/6.0/en/corrupted-myisam-tables.html

http://www.google.com/search?q=site%3Abugs.mysql.com+index+corruption

Джон Галлоуэй
источник
2
myIsam предназначен для очень быстрых ответов, он не требует принудительной проверки внешнего ключа, чтобы быть быстрее. Попробуйте использовать движок InnoDB, если делаете что-то более серьезное. У меня были некоторые действительно неприятные проблемы с MS Access, и я не могу простить их за такую ​​безответственность, поэтому я не одобряю ни одну из баз данных MS, позволяю им делать операционные системы и даю серьезный бизнес сообществу open source ... хотя вы не можете уверен в чем угодно, так как Oracle обогнал MySQL ..
ante.sabo
8
Справедливо, но глупо игнорировать базы данных Microsoft на основе Access. Доступ к нему является настольной базой данных и не имеет ничего общего с SQL Server. Вы знаете, что StackOverflow работает на SQL Server, верно?
Джон Галлоуэй
@JonGalloway: Привет, я новичок. Я просто хочу строго знать, есть ли у нас что-нибудь как MS SQL. Я думаю, что существует MS SQL Server. Не могли бы вы разъяснить мне это? Это может быть обычное слово, так что вы могли бы использовать его как MS SQL, и это имело бы смысл для каждого. Но я новичок, поэтому я немного зациклен на терминологии, чтобы понять эту концепцию. Пожалуйста, дайте мне знать, что вы говорите о MS SQL или MS SQL Server?
Нерушимый
1
Когда люди говорят MSSQL, TSQL, они обычно подразумевают язык SQL или Transaction SQL (TSQL), поставляемый с продуктом Microsoft SQL Server. Это не должно быть так сложно выяснить. Читайте на en.wikipedia.org/wiki/Microsoft_SQL_Server
Faiz
@JonGalloway и вот ссылка: stackoverflow.blog/2008/09/what-was-stack-overflow-built-with
Моаяд Хани Абу Rmilah
7

Честно говоря, я не могу найти единственную причину использовать MySQL, а не MSSQL. Раньше проблема была дорогой, но SQL Server 2005 Express бесплатен, и есть много компаний, предоставляющих услуги веб-хостинга, которые предлагают полный хостинг с сервером sql менее чем за 5 долларов в месяц.

MSSQL проще в использовании и имеет множество функций, которых нет в MySQL.

Абду
источник
2
Я думаю, что цена - единственная реальная причина выбрать MySQL вместо MSSQL. Конечно, есть дешевый хостинг MSSQL, но он редко и часто сильно ограничен в хранилище.
Крейг
21
Я бы сказал, что лицензирование - довольно веская причина для перехода на MySQL.
Доктор Майк
3
Group_concat и REGEXP более чем достаточные причины для использования MySQL поверх SQL Server (даже если две лицензии были переключены)
Мишель
1
Еще одна причина, по которой я бы выбрал MySQL, заключается в том, что если вам нужна локальная база данных и вы выбираете MS SQL Server, у вас должна быть запущена машина с Windows, что включает в себя больше затрат на лицензирование ... особенно, если вы хотите сохранить все в курсе
Педро Браз
2
Отказался, потому что я думаю, что это предвзято и, очевидно, неточно сказать, что нет единой причины использовать MySQL вместо MSSQL. SQL Server Express имеет серьезные ограничения, которых нет в MySQL, и ни один серьезный проект не будет использовать Express, что означает, что проблема стоимости все еще остается в силе. Большинство крупнейших компаний выбрали MySQL / MariaDB вместо MSSQL. Лично я бы тоже, не только из-за проблем с лицензированием и стоимостью, но потому что, по моему опыту, с MySQL работать намного проще. MySQL имеет тенденцию просто работать, в то время как я иногда сражаюсь с MSSQL, чтобы заставить его делать то, что я хочу.
Даллин
7

Все в MySQL, кажется, сделано ближе к металлу, чем в MSSQL, и документация относится к этому так. Специально для оптимизации вам необходимо понять, как индексы, конфигурация системы и оптимизатор взаимодействуют при различных обстоятельствах.

«Оптимизатор» - это скорее парсер. В MSSQL ваш план запроса часто вызывает удивление (обычно хорошо, иногда нет). В MySQL это в значительной степени делает то, что вы просили, так, как вы ожидали. Это означает, что вы сами должны иметь глубокое понимание различных способов, которыми это может быть сделано.

Не построен на хорошей модели TRANSACTION (движок MyISAM по умолчанию).

Настройка файловой системы - ваша проблема.

Вся конфигурация базы данных - ваша проблема, особенно различные размеры кеша.

Иногда кажется, что лучше думать об этом как о прославленном исаме. Кодд и Дэйт не имеют большого веса здесь. Они сказали бы это без смущения.

dkretz
источник
3
Современный MySQL по умолчанию использует Innodb, но это просто пояснение. Я думаю после 5.1 или около того. Innodb поддерживает транзакции, внешние ключи и блокировку на уровне строк, в отличие от блокировки на уровне таблиц с MyISAM.
Джозеф Гамильтон
5

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

Подробнее об этом рассказывается на странице загрузки MySQL 5.0 .

Джон Лимджап
источник
4

@abdu

Основное, что я обнаружил в MySQL по сравнению с MSSQL, - это поддержка часовых поясов - возможность красиво переключаться между часовыми поясами при соблюдении летнего времени - это просто фантастика.

Сравните это:

mysql> SELECT CONVERT_TZ('2008-04-01 12:00:00', 'UTC', 'America/Los_Angeles');
+-----------------------------------------------------------------+
| CONVERT_TZ('2008-04-01 12:00:00', 'UTC', 'America/Los_Angeles') |
+-----------------------------------------------------------------+
| 2008-04-01 05:00:00                                             |
+-----------------------------------------------------------------+

к искажениям, связанным с этим ответом .

Что касается комментария «проще в использовании», я бы сказал, что дело в том, что они разные, и если вы знаете одно, то изучение другого будет сопряжено с дополнительными затратами.

Cebjyre
источник
Кроме того, правильная поддержка ANSI для групп по, автоматические столбцы
отметок
1
Поддержка часового пояса в MySQL существенно нарушена, я не думаю, что это полезная функция. Сделайте это в приложении вместо этого.
MarkR
У меня не было проблем с поддержкой часовых поясов. Не могли бы вы рассказать подробнее или дать ссылку, пожалуйста?
Cebjyre
2
Зачем вам нужна поддержка часового пояса в базе данных? Используйте UTC везде и выполняйте рендеринг в интерфейсе пользователя / интерфейсе с использованием местного часового пояса ОС.
Tiberiu-Ionuț Stan
4

Оба продукта являются продуктом СУБД. Сервер Sql является коммерческим приложением, тогда как MySql является приложением с открытым исходным кодом. Оба продукта включают аналогичную функцию, однако сервер sql следует использовать для корпоративного решения, тогда как mysql может подходить для меньшей реализации. Если вам нужна такая функция, как восстановление, Репликация, Granalar безопасность и значимость, вам нужен сервер SQL

MySql занимает меньше места на диске и использует меньше памяти и процессора, чем сервер SQL

принц
источник
3

У кого-нибудь есть хороший опыт работы с «портом» базы данных с SQL Server на MySQL?

Это должно быть довольно больно! Я переключил версии MySQL с 4.x на 5.x, и различные операторы больше не работали, как раньше. Анализатор запросов был «улучшен», поэтому операторы, которые ранее были настроены на производительность, теперь не будут работать должным образом.

Урок, извлеченный из работы с базой данных MySQL объемом 500 ГБ: это тонкая тема и все остальное, кроме тривиального!

dlinsin
источник
2

@Cebjyre. IDE Enterprise Manager или Management Studio лучше, чем все, что я видел до сих пор для MySQL. Я говорю «проще в использовании», потому что я могу делать много вещей в MSSQL, где у MySQL нет аналогов. В MySQL я не знаю, как настроить запросы, просто взглянув на план запроса или просмотрев статистику. Мастер настройки индекса в MSSQL выполняет основную работу по предположению о том, какие индексы отсутствуют или находятся не на своем месте.

Одним из недостатков MySQL является отсутствие максимального размера базы данных. База данных будет только увеличиваться в размере, пока не заполнит диск. Представьте себе, если этот диск совместно использует базы данных с другими пользователями, и внезапно все их запросы перестают работать, потому что их базы данных не могут расти. Я уже давно сообщал об этой проблеме в MySQL. Я не думаю, что это все еще исправлено.

Абду
источник
2
С другой стороны, меня раздражает, что консоль управления студии не соблюдает отмены (возможно, есть действительный запрос, который он задушит, потому что он не понимает, что текст был обновлен), и отсутствие табуляции расширение (по сравнению с оболочкой mysql). Есть минусы с обеих сторон.
Cebjyre
1

Потратив некоторое время на работу с MySQL от MSSQL до MySQL с синтаксисом POV, я ограничивался тем, что мог делать.

Существуют странные ограничения на обновление таблицы во время обновления той же таблицы во время обновления.

Кроме того, UPDATE FROM не работает, и в прошлый раз я проверял, что они также не поддерживают синтаксис Oracle MERGE INTO. Для меня это был выставочный стопор, и я перестал думать, что после этого доберусь до MySQL.


источник