Відмінності між MySQL та SQL сервером [закрито]


144

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

Я розглядаю можливість випробувати стек LAMP для деяких моїх особистих проектів.

Які основні відмінності між MySQLта SQL Server? Чи є використання збережених процедур поширеною практикою MySQL?

Будь-яка порада чи ресурси, які ви рекомендуєте, щоб допомогти мені перейти?

Тим, хто має досвід роботи з обома, чи є якісь відсутні функції MySQL?

Відповіді:


139

Одне, на що потрібно стежити, - це досить серйозні відмінності в способі реалізації SQL Server та MySQL синтаксису SQL.

Ось приємне порівняння різних реалізацій SQL .

Наприклад, погляньте на верхній-розділ. У 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
і оракул теж різний: виберіть * з (виберіть вік від порядку замовлення за особою тому asc), де rownum <= 3 Поверніться ANSI SQL, все прощається :)
gbjbaanb

9
Просто перебіг це. Читання про всі відмінності змушує мене думати. Основи однакові (принаймні, з точки зору розуміння), але специфіка дуже-дуже різна.
JasCav

21
можливо, тупий коментар, але чому не може бути 1 sql мови ?? ... чи є різні html ?? ... так чому б не 1 sql.
більшийКінг

4
@greaterKing HTML - це набір структури та стандарт комітетом / консорціумом, SQL .. це не так, це просто сценарій мови, і єдиним власником є ​​розробник інтерпретатора. Це наче схоже на Javascript, у кожному браузері є свій JS-механізм і власний спосіб інтерпретації сценарію. Лише завдяки тиску громади зусилля, спрямовані на те, щоб привести цю мову до певної солідарності, вже зроблені. Але я хочу, щоб вони були надзвичайно схожі лише з незначними відмінностями
RedactedProfile

2
T-SQL перекладається на Transact-SQL;) Сервер Sql включає мову (T-SQL), але це програмне забезпечення в цілому, з графічним інтерфейсом, обробкою запитів локально і через мережу тощо.
Ботонд Берталан,

48

Багато коментарів тут звучать більше як релігійні аргументи, ніж твердження реального життя. Я роками працював і з MySQL, і з MSSQL, і обидва - хороші продукти. Я б вибрав MySQL в основному на основі середовища, над яким ви працюєте. Більшість проектів з відкритим кодом використовують MySQL, тому якщо ви йдете в цьому напрямку, MySQL - це ваш вибір. Якщо ви розробляєте щось з .Net, я б вибрав MSSQL не тому, що це набагато краще, а просто тому, що саме цим користується більшість людей. Зараз я фактично працюю над проектом, який використовує ASP.NET з MySQL та C #. Це прекрасно працює.


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 не підтримує загальні вирази таблиць (CTE) / "з". Це досить дратівлива різниця.


Я використовував як CTE, так і тимчасові / змінні таблиці. Яка була б користь від використання CTE над останніми двома?
Джаред

8
@Jred Використання CTE зберігає код читабельним, оскільки вам не потрібно визначати таблицю темпів, а це типи стовпців, а за допомогою cte ви навіть отримуєте інтелісенс для типу та імені стовпця, навіть якщо ви їх не вказали.
Алекс

9
Рекурсія - це одна користь, про яку потрібно згадати.
Фаїз

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+corption


2
myIsam призначений для дійсно швидких відповідей, він не змушений перевірити зовнішній ключ, щоб зробити його швидшим. Спробуйте використовувати двигун InnoDB, якщо робите щось більш серйозне. У мене були справді неприємні проблеми з MS Access, і я не можу пробачити їх за таку безвідповідальність, тому я не віддаю перевагу жодній із баз даних MS, нехай вони роблять ОС, і дають серйозний бізнес спільноті з відкритим кодом ... хоча ви не можете бути впевнений у чомусь, оскільки Oracle наздогнав MySQL ..
ante.sabo

8
Досить справедливо, але це нерозумно ігнорувати бази даних Microsoft, засновані на Access. Доступ до нього є настільною базою даних і не має нічого спільного з SQL Server. Ви знаєте, що StackOverflow працює на SQL сервері, правда?
Джон Галлоуей

@JonGalloway: Привіт, я початківець. Я просто хочу чітко знати, чи є у нас що-небудь як MS SQL. Я думаю, що існує MS SQL Server. Можете, будь ласка, уточнити мене з цього приводу. Це може бути звичайне слово, тому ви могли використовувати його як MS SQL, і це мало б сенс для кожного. Але я початківець, тому я своєрідно закріплений термінологіями, щоб отримати поняття. Будь ласка, дайте мені знати, про що ви говорите - це MS SQL або MS SQL Server?
Незламний

1
Коли люди кажуть MSSQL, TSQL, вони зазвичай мають на увазі мову SQL або транзакції SQL (TSQL), що постачається разом із продуктом Microsoft SQL Server. Це не повинно бути таким важким для з'ясування. Читай на en.wikipedia.org/wiki/Microsoft_SQL_Server
Faiz


7

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

MSSQL простіший у використанні та має багато функцій, яких не існує в MySQL.


2
Я думаю, що ціна є єдиною реальною причиною вибору MySQL над MSSQL. Звичайно, є якийсь дешевий хостинг MSSQL, але він є рідкісним і часто сильно обмежений на зберігання.
Крейг

21
Я б сказав, що ліцензування - це досить вагомий привід працювати з MySQL.
Доктор Майк

3
Group_concat та REGEXP - більш ніж достатньо причин використовувати MySQL через SQL Server (навіть якщо дві ліцензії були переключені)
Michele

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 за замовчуванням).

Ваша проблема - налаштування файлової системи.

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

Іноді здається, що найкраще думати про це як про спеціальний прославлений ізам. Codd і Date не мають великої ваги тут. Вони б сказали це без сором.


3
Сучасні параметри MySQL за замовчуванням для Innodb - це лише уточнення. Я думаю, що після 5,1 або близько того. Innodb підтримує транзакції, зовнішні ключі та блокування рівня рядків на відміну від блокування рівня таблиці в MyISAM.
Джозеф Гамільтон


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                                             |
+-----------------------------------------------------------------+

до суперечок, пов'язаних з цією відповіддю .

Що стосується коментаря "простіший у використанні", я б сказав, що справа в тому, що вони різні, і якщо ви знаєте одне, то буде вивчати інше.


Крім того, виправдайте підтримку для групу, автоматичні стовпчики часових позначок, МНОГО простіші підкачки ...
Joel Coehoorn,

1
Підтримка часового поясу MySQL значно порушена, я не думаю, що це корисна функція. Зробіть це замість програми.
MarkR

У мене не було проблем із підтримкою часового поясу. Чи можете ви детальніше розглянути деталі чи надати посилання?
Чеб'єр

2
Навіщо вам потрібна підтримка часового поясу в базі даних? Використовуйте UTC скрізь та візуалізуйте в передній частині / gui, використовуючи локальний часовий пояс ОС.
Тіберіу-Іонуț Стан

4

Обидва - сервер Product Sql DBMS - комерційна програма, в той час як MySql - це програма openouces. Але продукт включає подібну функцію, однак сервер sql повинен використовуватися для корпоративного рішення, тоді як mysql може відповідати меншій реалізації. Якщо вам потрібна така функція, як відновлення, реплікація, гранальна безпека та важливе значення, вам потрібен сервер sql

MySql займає менше місця на диску і використовує менше пам'яті та процесора, ніж сервер sql


3

Хтось має хороший досвід роботи з «портом» бази даних від SQL Server до MySQL?

Це має бути досить болісно! Я перемикав версії MySQL з 4.x на 5.x, і різні заяви більше не працюватимуть, як раніше. Аналізатор запитів був «покращений», тому твердження, які раніше були налаштовані на ефективність, більше не працюватимуть, як очікувалося.

Урок, отриманий з роботи з базою даних MySQL на 500 ГБ: Це тонка тема і все інше, окрім дрібниці!


2

@Cebjyre. IDE, будь то Enterprise Manager або Management Studio, кращий за все, що я бачив для MySQL. Я кажу "простіше у використанні", оскільки я можу робити багато речей у MSSQL, де MySQL не має аналогів. У MySQL я не маю уявлення, як настроїти запити, просто переглянувши план запитів або переглянувши статистику. Майстер настройки індексу в MSSQL займає більшу частину роботи з здогадів щодо того, які індекси відсутні чи неправильно розміщені.

Одним із недоліків MySQL є відсутність максимального розміру для бази даних. База даних просто збільшиться в розмірі, поки вона не заповнить диск. Уявіть, якщо цей диск обмінюється базами даних з іншими користувачами і раптом усі їх запити не вдається, оскільки їхні бази даних не можуть рости. Я давно повідомляв про цю проблему в MySQL. Я не думаю, що це ще виправлено.


2
З іншого боку, мене дратувало консоль управління студією, яка не поважає скасування скасування (можливо, є дійсний запит, який він задає, оскільки він не усвідомлює, що текст був оновлений), і відсутність вкладки -розширення (порівняно з оболонкою mysql). З обох боків є мінуси.
Цеб'єр

1

Провівши деякий час, працюючи з MySQL від MSSQL до синтаксису MySQL POV, я обмежився тим, що міг би зробити.

Існують обмеження щодо оновлення таблиці під час оновлення цієї ж таблиці під час оновлення.

Крім того, ОНОВЛЕННЯ ВІД не працює, і я востаннє перевіряв, що вони не підтримують синтаксис Oracle MERGE INTO. Це була пробка для шоу, і я перестала думати, що після цього я дістанусь кудись із MySQL.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.