Sự khác biệt giữa MySQL và SQL Server [đã đóng]


144

Tôi là một nhà phát triển ASP.NET đã sử dụng Microsoft SQL Servercho tất cả các nhu cầu cơ sở dữ liệu của tôi (cả trong công việc và cho các dự án cá nhân).

Tôi đang xem xét dùng thử LAMP stack cho một số dự án cá nhân của tôi.

Một số khác biệt chính giữa MySQLvà là SQL Servergì? Là sử dụng các thủ tục lưu trữ là một thực tế phổ biến trong MySQL?

Bất kỳ lời khuyên hoặc tài nguyên nào bạn muốn giới thiệu để giúp tôi chuyển đổi?

Đối với những người có kinh nghiệm với cả hai, có thiếu tính năng nào từ MySQL?

Câu trả lời:


139

Một điều bạn phải coi chừng là sự khác biệt khá nghiêm trọng trong cách SQL Server và MySQL thực hiện cú pháp SQL.

Đây là một so sánh tốt đẹp của các triển khai SQL khác nhau .

Ví dụ, hãy xem phần top-n. Trong MySQL:

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

Trong máy chủ SQL (T-SQL):

SELECT TOP 3 WITH TIES *
FROM person
ORDER BY age ASC

27
và oracle là khác nhau quá: select * from (select tuổi từ để người bởi asc trước), nơi rownum <= 3 Come back ANSI SQL, tất cả được tha thứ :)
gbjbaanb

9
Chỉ cần chạy qua đây. Đọc về tất cả sự khác biệt làm cho tôi co rúm lại. Những điều cơ bản là giống nhau (ít nhất là về cách hiểu), nhưng các chi tiết cụ thể rất, rất khác nhau.
JasCav

21
có thể là một nhận xét ngu ngốc nhưng tại sao không thể có ngôn ngữ 1 sql ?? ... có khác html không? ... vậy tại sao không phải là 1 sql.
lớn hơn

4
@gTHERKing HTML là một cấu trúc và tiêu chuẩn được thiết lập bởi một ủy ban / tập đoàn, SQL .. không phải, nó chỉ là một ngôn ngữ kịch bản và chủ sở hữu duy nhất là nhà phát triển trình thông dịch. Theo một cách nào đó, nó giống như Javascript, mọi trình duyệt đều có công cụ JS riêng và cách diễn giải tập lệnh riêng. Chỉ bằng áp lực tuyệt đối từ cộng đồng, những nỗ lực đưa ngôn ngữ đó đến một loại đoàn kết nào đó đã được thực hiện. Nhưng tôi ước gì tất cả đều giống nhau chỉ với những khác biệt nhỏ
RedactedProfile

2
T-SQL dịch sang Transact-SQL;) Máy chủ Sql bao gồm ngôn ngữ (T-SQL) nhưng nó là một phần mềm nói chung, với GUI, xử lý các yêu cầu cục bộ và qua mạng, v.v.
Botond Bertalan

48

Rất nhiều ý kiến ​​ở đây nghe giống như tranh luận tôn giáo hơn là tuyên bố ngoài đời thực. Tôi đã làm việc nhiều năm với cả MySQL và MSSQL và cả hai đều là những sản phẩm tốt. Tôi sẽ chọn MySQL chủ yếu dựa trên môi trường mà bạn đang làm việc. Hầu hết các dự án nguồn mở đều sử dụng MySQL, vì vậy nếu bạn đi theo hướng đó thì MySQL là lựa chọn của bạn. Nếu bạn phát triển một cái gì đó với .Net, tôi sẽ chọn MSSQL, không phải vì nó tốt hơn nhiều, mà chỉ vì đó là thứ mà hầu hết mọi người sử dụng. Tôi thực sự hiện đang ở trên một Dự án sử dụng ASP.NET với MySQL và C #. Nó hoạt động hoàn toàn tốt.


3
Nói đúng ra, bạn không nghĩ rằng không có gì giống như MS SQL. Thứ tồn tại là "MS SQL Server".
Không thể phá vỡ

Tôi chắc chắn bạn biết nhiều hơn tôi. Tôi chỉ là người mới bắt đầu, bạn có thể vui lòng cho tôi biết nếu tôi nhầm không? Có bất cứ điều gì chính xác như MS SQL?
Không thể phá vỡ

2
Tôi không chắc chắn những gì bạn đang hỏi?
Rémy

3
Đúng rồi. Microsoft SQL Server 2012 hoặc bất kỳ phiên bản nào bạn sử dụng.
Rémy

5
Lập trình là tất cả về các từ viết tắt ngày nay. Hãy lấy ví dụ về bạn nói về a Lamp Stack. Rất nhiều người có thể sẽ chỉ nói LAMP hoặc WAMP. Tương tự, thay vì nói Microsoft SQL Server, chúng tôi đã biến MS SQL Server thành MS SQL thành MSSQL
ytpillai

23

Tôi không thể tin rằng không ai đề cập rằng MySQL không hỗ trợ các câu lệnh Biểu thức chung (CTE) / "với". Đó là một sự khác biệt khá khó chịu.


Tôi đã sử dụng cả CTE cũng như bảng temp / biến. Lợi ích của việc sử dụng CTE so với hai cái sau là gì?
Jared

8
@Jared Sử dụng CTE giữ cho mã có thể đọc được vì bạn không cần xác định bảng tạm thời và các loại cột và bằng cách sử dụng cte, bạn thậm chí có được một thông báo cho loại cột và tên ngay cả khi bạn không chỉ định chúng.
Aleks

9
Đệ quy là một lợi ích cần được đề cập.
Faiz

2
Mysql 8 hỗ trợ CTE
Ivanzinho

Vì vậy, mysql bây giờ cũng nhận được cú pháp cú pháp.
TheLegendaryCopyCoder

15

MySQL có nhiều khả năng gặp sự cố tham nhũng cơ sở dữ liệu và nó không tự động sửa chúng khi chúng xảy ra. Tôi đã làm việc với MSSQL kể từ phiên bản 6.5 và không nhớ vấn đề hỏng cơ sở dữ liệu khi lấy cơ sở dữ liệu ngoại tuyến. Một vài lần tôi đã làm việc với MySQL trong môi trường sản xuất, một sự cố hỏng cơ sở dữ liệu đã đưa toàn bộ cơ sở dữ liệu ngoại tuyến cho đến khi chúng tôi chạy phép thuật "vui lòng sửa chỉ mục bị hỏng của tôi" từ dòng lệnh.

Theo kinh nghiệm của tôi, hệ thống nhật ký và giao dịch của MSSQL xử lý mọi vấn đề - bao gồm cả chu trình điện hoặc lỗi phần cứng - mà không làm hỏng cơ sở dữ liệu và nếu có gì đó bị rối, nó sẽ tự động sửa.

Đây là kinh nghiệm của tôi và tôi rất vui khi biết rằng nó đã được sửa hoặc chúng tôi đã làm gì đó sai.

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 có nghĩa là cho các phản hồi thực sự nhanh chóng, nó không buộc phải kiểm tra khóa ngoại vì lý do phải nhanh hơn. Hãy thử sử dụng công cụ InnoDB nếu làm việc gì đó nghiêm trọng hơn. Tôi đã gặp một số vấn đề thực sự khó chịu với MS Access và không thể tha thứ cho họ vì sự vô trách nhiệm đó, vì vậy tôi không ủng hộ bất kỳ cơ sở dữ liệu nào của MS, hãy để họ làm HĐH và giao dịch nghiêm túc cho cộng đồng nguồn mở ... mặc dù bạn không thể chắc chắn về bất cứ điều gì kể từ khi Oracle đã vượt qua MySQL ..
ante.sabo

8
Đủ công bằng, nhưng thật ngớ ngẩn khi bỏ qua cơ sở dữ liệu của Microsoft dựa trên Access. Truy cập nó là một cơ sở dữ liệu trên máy tính để bàn và không liên quan gì đến SQL Server. Bạn biết StackOverflow chạy trên SQL Server, phải không?
Jon Galloway

@JonGalloway: Xin chào tôi là người mới bắt đầu. Tôi chỉ muốn biết một cách nghiêm túc rằng chúng ta có bất cứ điều gì như MS SQL. Tôi nghĩ những gì tồn tại là MS SQL Server. Bạn có thể vui lòng làm rõ tôi về điều này. Nó có thể là một từ phổ biến vì vậy bạn có thể đã sử dụng nó như MS SQL và nó sẽ có ý nghĩa với mọi người. Nhưng tôi là người mới bắt đầu nên tôi cố định các thuật ngữ để có được khái niệm này. Xin vui lòng cho tôi biết những gì bạn đang nói về MS SQL hoặc MS SQL Server?
Không thể phá vỡ

1
Khi mọi người nói MSSQL, TSQL, họ thường có nghĩa là ngôn ngữ SQL hoặc SQL giao dịch (TSQL) được gửi cùng với sản phẩm Microsoft SQL Server. Điều này không nên khó tìm ra. Đọc trên en.wikipedia.org/wiki/Microsoft_Query_Server
Faiz


7

Thành thật mà nói, tôi không thể tìm thấy một lý do duy nhất để sử dụng MySQL thay vì MSSQL. Vấn đề trước đây từng là chi phí nhưng SQL Server 2005 Express là miễn phí và có rất nhiều công ty lưu trữ web cung cấp dịch vụ lưu trữ đầy đủ với máy chủ sql với giá dưới 5,00 đô la một tháng.

MSSQL dễ sử dụng hơn và có nhiều tính năng không tồn tại trong MySQL.


2
Tôi nghĩ rằng giá là lý do thực sự duy nhất để chọn MySQL trên MSSQL. Chắc chắn, có một số lưu trữ MSSQL giá rẻ nhưng nó rất hiếm và thường bị hạn chế nghiêm trọng về lưu trữ.
Craig

21
Tôi muốn nói rằng việc cấp phép là một lý do khá chính đáng để đi với MySQL.
Bác sĩ Mike

3
Group_concat và REGEXP là quá nhiều lý do để sử dụng MySQL trên SQL Server (ngay cả khi hai giấy phép đã được chuyển đổi)
Michele

1
Một lý do khác khiến tôi đi với MySQL là vì nếu bạn muốn có một cơ sở dữ liệu cục bộ và bạn dùng MS SQL Server, bạn sẽ phải có một máy Windows chạy, bao gồm nhiều chi phí cấp phép hơn ... đặc biệt nếu bạn muốn giữ tất cả cập nhật
Pedro Braz

2
Bị hạ thấp bởi vì tôi nghĩ rằng nó thiên vị và rõ ràng là không chính xác để nói rằng không có một lý do duy nhất nào để đi với MySQL qua MSSQL. SQL Server Express có những hạn chế nghiêm trọng mà MySQL không có, và không có dự án nghiêm túc nào sẽ sử dụng Express, có nghĩa là vấn đề chi phí vẫn rất hợp lệ. Hầu hết các công ty lớn nhất đã chọn MySQL / MariaDB thay vì MSSQL. Cá nhân tôi cũng vậy, không chỉ vì vấn đề cấp phép và chi phí mà bởi vì theo kinh nghiệm của tôi, MySQL chỉ dễ làm việc hơn rất nhiều. MySQL có xu hướng chỉ hoạt động, trong khi tôi thấy mình thỉnh thoảng chiến đấu với MSSQL để khiến nó làm điều tôi muốn.
dallin

7

Mọi thứ trong MySQL dường như được thực hiện gần với kim loại hơn trong MSSQL, và tài liệu xử lý theo cách đó. Đặc biệt để tối ưu hóa, bạn sẽ cần hiểu cách lập chỉ mục, cấu hình hệ thống và trình tối ưu hóa tương tác trong các trường hợp khác nhau.

"Trình tối ưu hóa" là một trình phân tích cú pháp nhiều hơn. Trong MSSQL kế hoạch truy vấn của bạn thường gây bất ngờ (thường là tốt, đôi khi không). Trong MySQL, nó thực hiện khá nhiều những gì bạn yêu cầu nó làm, theo cách bạn mong đợi. Điều đó có nghĩa là bản thân bạn cần có một sự hiểu biết sâu sắc về những cách khác nhau có thể được thực hiện.

Không được xây dựng xung quanh một mô hình TRANSACTION tốt (công cụ MyISAM mặc định).

Thiết lập hệ thống tập tin là vấn đề của bạn.

Tất cả các cấu hình cơ sở dữ liệu là vấn đề của bạn - đặc biệt là các kích thước bộ đệm khác nhau.

Đôi khi có vẻ tốt nhất để nghĩ về nó như là một isam ad-hoc, vinh quang. Codd và Date không mang nhiều trọng lượng ở đây. Họ sẽ nói điều đó mà không có sự bối rối.


3
Mặc dù vậy, MySQL hiện đại mặc định là Innodb, chỉ là một điểm cần làm rõ. Tôi nghĩ sau 5.1 hoặc hơn. Innodb không hỗ trợ các giao dịch, khóa ngoại và khóa cấp hàng thay vì khóa cấp bảng với MyISAM.
Joseph Hamilton

5

Tôi nghĩ một trong những điều quan trọng cần chú ý là các phiên bản trước MySQL 5.0 không có chế độ xem, kích hoạt và quy trình được lưu trữ.

Nhiều hơn về điều này được giải thích trong trang Tải xuống MySQL 5.0 .


4

@abdu

Điều chính tôi đã thấy rằng MySQL có trên MSSQL là hỗ trợ múi giờ - khả năng thay đổi độc đáo giữa các múi giờ, tôn trọng tiết kiệm ánh sáng ban ngày là tuyệt vời.

So sánh điều này:

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

cho các mâu thuẫn liên quan đến câu trả lời này .

Đối với nhận xét 'dễ sử dụng hơn, tôi sẽ nói rằng vấn đề là chúng khác nhau, và nếu bạn biết một thứ, sẽ có một chi phí lớn trong việc học cái khác.


Ngoài ra, sửa lỗi hỗ trợ ansi cho nhóm bằng, các cột dấu thời gian tự động, phân trang đơn giản hơn NHIỀU ...
Joel Coehoorn

1
Hỗ trợ múi giờ của MySQL bị phá vỡ đáng kể, tôi không nghĩ đó là một tính năng hữu ích. Làm điều đó trong ứng dụng thay thế.
MarkR

Tôi chưa có vấn đề gì với hỗ trợ múi giờ, bạn có thể đi sâu vào chi tiết hơn hoặc cung cấp một liên kết không?
Cebjyre

2
Tại sao bạn cần hỗ trợ múi giờ trong cơ sở dữ liệu? Sử dụng UTC ở mọi nơi và kết xuất ở giao diện người dùng / gui bằng múi giờ địa phương của HĐH.
Tiberiu-Ionuț Stan

4

Cả hai đều là máy chủ Product Sql của DBMS là một ứng dụng thương mại trong khi MySql là một ứng dụng mở. Cả hai sản phẩm đều có tính năng tương tự, tuy nhiên máy chủ sql nên được sử dụng cho giải pháp doanh nghiệp, trong khi mysql có thể phù hợp với triển khai nhỏ hơn. Nếu bạn cần tính năng như recovery, nhân rộng, bảo mật granalar và đáng kể, bạn cần máy chủ sql

MySql chiếm ít dung lượng trên đĩa hơn và sử dụng ít bộ nhớ và cpu hơn so với máy chủ sql


3

Bất cứ ai cũng có kinh nghiệm tốt với "cổng" cơ sở dữ liệu từ SQL Server sang MySQL?

Điều này nên khá đau! Tôi đã chuyển các phiên bản của MySQL từ 4.x sang 5.x và các câu lệnh khác nhau sẽ không hoạt động nữa như trước đây. Trình phân tích truy vấn đã được "cải thiện" để các câu lệnh trước đây được điều chỉnh cho hiệu suất sẽ không hoạt động như mong đợi.

Bài học rút ra khi làm việc với cơ sở dữ liệu MySQL 500 GB: Đó là một chủ đề tinh tế và bất cứ điều gì khác ngoài tầm thường!


2

@Cebjyre. IDE cho dù Enterprise Manager hay Management Studio tốt hơn bất cứ thứ gì tôi thấy cho đến nay đối với MySQL. Tôi nói 'dễ sử dụng hơn' vì tôi có thể thực hiện nhiều điều trong MSSQL khi MySQL không có đối tác. Trong MySQL tôi không biết làm thế nào để điều chỉnh các truy vấn bằng cách chỉ cần nhìn vào kế hoạch truy vấn hoặc xem số liệu thống kê. Trình hướng dẫn điều chỉnh chỉ mục trong MSSQL chiếm phần lớn công việc đoán về những chỉ mục bị thiếu hoặc đặt sai vị trí.

Một thiếu sót của MySQL là không có kích thước tối đa cho cơ sở dữ liệu. Cơ sở dữ liệu sẽ chỉ tăng kích thước cho đến khi nó lấp đầy đĩa. Hãy tưởng tượng nếu đĩa này đang chia sẻ cơ sở dữ liệu với người dùng khác và đột nhiên tất cả các truy vấn của họ đều thất bại vì cơ sở dữ liệu của họ không thể phát triển. Tôi đã báo cáo vấn đề này với MySQL từ lâu. Tôi không nghĩ nó đã được sửa.


2
Mặt khác, tôi đã cảm thấy khó chịu vì bảng điều khiển của studio quản lý không tôn trọng hoàn tác (có thể có một truy vấn hợp lệ mà nó bị nghẹt, vì nó không nhận ra văn bản đã được cập nhật) và thiếu tab mở rộng (so với shell mysql). Có những điểm trừ ở cả hai phía.
Cebjyre

1

Dành thời gian làm việc với MySQL từ MSSQL sang cú pháp MySQL POV Tôi cứ thấy mình bị giới hạn trong những gì tôi có thể làm.

Có các giới hạn bizzare khi cập nhật một bảng trong khi điều chỉnh cùng một bảng trong khi cập nhật.

Ngoài ra, CẬP NHẬT TỪ không hoạt động và lần trước tôi đã kiểm tra họ cũng không hỗ trợ cú pháp Oracle MERGE INTO. Đây là một điểm dừng chương trình cho tôi và tôi đã ngừng nghĩ rằng tôi sẽ đến bất cứ nơi nào với MySQL sau đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.