MSSQL MySQL 문법 차이 - MSSQL MySQL munbeob chai

이번에 면접을 보면서 가장 많이 받은 질문이다. 비록 세개의 DBMS를 사용해보지 않았다 하더라도 차이점을 알아두는 것은 여러모로 유용할 것같다. 그런데 막상 비교하려면 어떤 성능이라든가, 기능에대해 비교를 해야겠지만 막상 셋다 기능은 비슷하게 지원이 가능하고, 성능을 테스트 하기에는 나에게는 조금 버겁다. 그렇다고 해서 쿼리문이나 내장함수가 다르다고 말할 수 도 없는 노릇이고. 

그래서 이번글은 테크니컬한 글은 아니므로 그냥 '이런 사람도 있구나 하고' 넘어가면 좋을거 같다. 면접에서 유리한 대답이 아닌, '실무에서 이렇게 쓰이더라' 라는 경험을 한번 써볼까 한다.

현장에서 살펴본 현실을 이야기해보자면 돈이 있는곳은 오라클을 선호하고, 돈이 적거나 중소기업들은 대체로 MySQL을 선호하고, 전화기와 같은 장비 업체들이 서버를 윈도우로 두어야 해서 MSSQL을 사용하는등 크게 3가지로 나뉘는걸 보았다. 

그게 아니라면 이전 시스템을 구축하던 사람이 선호하는 DBMS를 따라가는 경우도 많이 보았다. 그중에는 어쩔수 없이 바꾼경우도 있는데, 일했던 회사중엔 네트워크 감시 솔루션을 제공하는 회사였는데, 기존에 MSSQL을 쓰면서 유지비용 및 단가가 더 나가니 MYSQL로 바꾸는 걸 보았다.(그 과정은 쉽진 않았다)

대부분의 대기업들은 ORACLE이 대세를 이루었다. 그래서 큰 프로젝트를 많이 다닌 사람이라면 ORACLE을 더 잘 다루는 거 같다. 그런데 그거 왜써요? 라고 물어보면 대답하는 사람이 별로없다. 편해서? 라는 말을 가장 많이 들어본거 같다.(나도 ORACLE이 가장 편하다)

내 경험으론 ORACLE을 많이 쓰는 이유중 많이 대중화 되어있고(대기업 위주로) 그만큼 실력과 많은 레퍼런스가 쌓였으며 소위 돈으로 떼울 수만 있다면 각종 문제점을 해결할 수 있다. 데이터 누실로부터의 안전성부터 시작해서, DB 튜닝까지 다양한 방면이 ORACLE에 몰려있다. 간단하게 생각해봐도 대기업들이 그 시스템만 쓰다보면 사람들의 기술발전도 그쪽으로 몰리기 마련이고, 특히 DB튜닝 같은것은 대용량 처리를 시작하게 되면 필요하게 되는거라 그런 전문적인 것은 한참 후의 일이기도 하다. 물론 상대적으로 간단한 DB튜닝(인덱스, 힌트, 테이블 재정의 등 각종 방법)등은 나도 해본적이 있고 필요하면 쓰지만 거기서 더 확장해서 DBMS 의 구조자체를 뜯어보며 튜닝하진 않는다. 그런곳은 데이터가 월 몇테라씩 쌓이는 곳이니까.(그것조차도 분할해서 하는 경우도 있지만)

다만 유료인 만큼 유용한 기능도 정말 많다. 내장함수도 쓸만한게 많고, 성능도 잘 나오고, 파티션 시스템은 대용량 처리에도 좋고, 힌트도 적절하게 사용하면 퍼포먼스가 좋다. 그리고 많은 사람들이 쓰는 만큼 Trigger, Job, PL-SQL, View 등 각종 기능에 대해 찾아보는 것도, 사용하는 것도 유리하다. 이전에 어떤 프로젝트에서는 MySQL에서 재귀호출 해주는 함수가 없어 직접 짜는걸 보기도 했다. (오라클은 Start With 를 통해 간단히 해결). 생각해보면 이런 은연중 자주쓰이는 함수들이 부재함으로써 개발비용이 추가적으로 든다는건 단점이라면 단점이라고도 할 순 있겠구나 싶다.

아이러니 한 것은 PL-SQL이나 트리거 등 내장함수 OR 프로시져 사용에 대해 조금 인색하다. 둘다 성능이 딱히 무엇이 더 좋고 한것도 없는데, 대기업은 이런 것을 적극적으로 활용하는 반면, 중소기업은 이런것도 유지보수 할 것이 늘어난다고 판단하는지 불편해했다. 결국 Language로 컨트롤 해줬는데, 지금도 아이러니 하게 생각하는 것중 하나다.

MSSQL은 사용하는 곳은 매우 적었다. 아마 내 주 Language가 JAVA이다 보니 대부분 리눅스 기반 서버라 ORACLE과 MySQL로 나뉘는 듯 하다. MS 쪽 Language를 쓰시는 분들은 MSSQL을 많이 쓰는거 같은데 아마 당분간도 보기 힘들거 같다.

그냥 재미삼아 다른점을 정리해 보았다. 나역시도 오라클을 쓰는걸 선호하지만 MySQL도 좋게 생각한다. 다만, 대기업은 사업의 크기만큼 DB를 통한 다양한 퍼포먼스에 대해 고민하게 만들고 다양한 함수 or 기능사용이 유도되는데 반해 중소기업에서는 당장 하나를 제대로 구현하는것도 바빠보여서 그런 기술적인 접근은 좀 불편해 하는거 같았다. 뭐, 이런것도 개인의 취향이니까. 

아래의 글은 주로 MS SQL Server가 실제 조작과 MySQL 데이터베이스에 따라 다르다는 것을 소개합니다. 우리는 모두 My SQL 데이터베이스가 실제 응용에서 일정한 비율을 차지하는지 알고 있습니다. 그러면 MS SQL Server는 어떻습니까?아래의 글은 주로 MySQL 데이터베이스와 MSSQL Server의 차이에 대한 설명이다.
MS SQL Server와 MySQL 데이터베이스의 차이점:
1. MySQL 지원 enum 및 set 유형, SQL Server 지원 안 함
2. MySQL 데이터베이스는 nchar, nvarchar, ntext 유형을 지원하지 않습니다.
3. MySQL의 점증문은 AUTOINCREMENT, MS SQL은 identity(1,1)
4. MS SQL은 Replace into 문장을 지원하지 않지만, 최신 sql20008에서는merge 문법도 지원합니다
5.MySQL은 insert into table1 set t1 = "", t2 = "를 지원하지만 MSSQL은 이렇게 쓰는 것을 지원하지 않습니다.
6.MySQL 지원 insert into tabl1 values(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1)
7.MS SQL은 limit 문장을 지원하지 않습니다. 매우 유감스럽지만 limt0, N,row 대신 top만 사용할 수 있습니다.number () over () 함수가 limit N, M 대신
8.MySQL은 테이블을 만들 때 각 테이블에 하나의 스토리지 엔진 유형을 지정하고 MS SQL은 하나의 스토리지 엔진만 지원합니다.
9.PHP는 MySQL 데이터베이스와 MSSQL을 연결하는 방식이 크게 다르지 않으니 함수의 MySQL을 MSSQL로 바꾸기만 하면 된다.
10. MySQL 관리자는 몇 가지 좋은 것을 가지고 있다. MySQLfront, 그리고 공식 세트입니다. 하지만 SSMS의 사용이 편리하지 않습니다. 이것은 MySQL의 매우 큰 단점입니다.
11.MySQL은 테이블에 스토리지 유형을 지정해야 합니다.
12. MS SQL 식별자는 [type]로 키워드와 구별됨을 나타낸다. 그러나 My SQL은 `, 즉 버튼 1 왼쪽의 그 기호이다
주의: 이거 따옴표 아니야. 나 처음부터 여기서 졸렸어!!!
13. MSSQL은 getdate () 방법을 지원하여 현재 시간 날짜를 얻지만, MySQL에서는 날짜 형식과 시간 형식을 나눌 수 있으며, 현재 날짜를 얻는curdate (), 현재 전체 시간은 now () 함수
14. MysQL은 기본값이 현재 시간의datetime 형식을 지원하지 않습니다. MSSQL은 쉽게 할 수 있습니다. MysQL 데이터베이스에서timestamp 형식을 사용합니다.
15. MS SQL에서 이 테이블이 있는지 확인하고 삭제하려면 다음이 필요합니다.


 
   
  1. if exists (select * from dbo.systs  
  2. here id = t_id(N"uc_newpm")andTPROPERTY(id,N"IsUserTable")=1) 

하지만 MySQL에서는 DROP TABLE IF EXISTS cdbforums;
16.MySQL text 필드 유형에는 기본값이 허용되지 않습니다.
17. MySQL 테이블의 전체 필드 길이는 65XXX를 초과하지 않습니다.
18. MS SQL 기본 여기저기 테이블 생성 문장의 기본값은 (0)을 표시하지만 My SQL 안에서는 두 괄호를 사용할 수 없습니다
19. 같은 부하 압력으로 MySQL은 더 적은 CPU와 메모리를 소모해야 하기 때문에 MSSQL은 확실히 자원을 소모한다.
20.MySQL은 기호가 없는 정수를 지원한다. 그러면 기호가 없는 MSSQL보다 두 배의 최대 저장을 할 수 있다
21. MSSQL은 MSSQL에서 매우 편리한 varchar(max) 형식을 지원하지 않습니다. 이 유형은 MSSQL에서 일반 데이터 저장도 할 수 있고blob 데이터 저장도 할 수 있습니다.
22. MySQL 데이터베이스에서 비집합 인덱스를 만들 때 키로 지정하면 된다. 예를 들어 KEYdisplayorder(fid,displayorder)는 MSSSQL에서 반드시 다음과 같이 해야 한다.


 
   
  1. create unique nonclustered index  
  2. index_uc_protectedmrs_username_appid on dbo.uc_protectedmrs  
  3. (username asc,appid asc)  

23. 아주 표면적인 차이점은 MySQL의 설치가 매우 간단하고 파일 크기가 110M(비설치판)에 불과하다는 것이다. 마이크로소프트라는 거대한 물건에 비해 설치 진도는 그야말로......
24. MySQL의 저장 과정은 최신 버전에만 나타나고 안정성과 성능이 MS SQL보다 못할 수 있다.
25. MySQL 데이터베이스는date,time,year 형식을 지원하고 MSSQL은2008에서date와time를 지원합니다