ANSI SQL에 대한 이해, ANSI SQL, MySQL의 주요 차이점, 특징과 장 단점을 비교하는 글이다.
ANSI SQL(American National Standards Institute SQL)은 관계형 데이터베이스 관리 시스템(RDBMS)의 표준 언어다. 다양한 데이터베이스 간 호환성을 보장하기 위해 만들어졌다.
ANSI SQL은 표준 문법을 제공하지만,
MySQL은 이를 기반으로 고유한 확장 기능을 제공한다.
ANSI SQL: SELECT FROM table_name LIMIT 5 OFFSET 10
MySQL: SELECT FROM table_name LIMIT 10, 5
ANSI SQL: SELECT 'Hello' || ' ' || 'World' AS greeting
MySQL: SELECT CONCAT('Hello', ' ', 'World') AS greeting
ANSI SQL: 대소문자 구분 (일반적으로)
MySQL: 기본적으로 대소문자 구분 안 함 (Windows), 구분함 (Unix/Linux)
기본적인 데이터 타입은 공유하지만, MySQL은 추가적인 타입을 제공한다.
ANSI SQL: NUMERIC, VARCHAR, DATE
MySQL: TINYINT, MEDIUMTEXT, ENUM
두 시스템 모두 저장 프로시저를 지원하지만, 문법 차이가 있다.
-- ANSI SQL
CREATE PROCEDURE get_employee_by_id (IN emp_id INT)
AS
BEGIN
SELECT * FROM employees WHERE id = emp_id;
END;
-- MySQL
DELIMITER //
CREATE PROCEDURE get_employee_by_id(IN emp_id INT)
BEGIN
SELECT * FROM employees WHERE id = emp_id;
END //
DELIMITER ;
ANSI SQL은 자동 증가 칼럼에 대한 표준을 제공하지 않지만, MySQL은 AUTO_INCREMENT 키워드를 사용한다.
-- MySQL
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50)
);
MySQL은 ANSI SQL에는 없는 고유한 기능을 제공한다.
sqlCopyINSERT INTO table_name (col1, col2) VALUES (1, 'a'), (2, 'b'), (3, 'c');
sqlCopyREPLACE INTO table_name SET col1 = 'value1', col2 = 'value2';
sqlCopyINSERT INTO table_name (id, value) VALUES (1, 10)
ON DUPLICATE KEY UPDATE value = value + 10;
ANSI SQL의 호환성이 중요하다면 표준을 따르고, MySQL의 특화된 기능이 필요하다면 MySQL을 활용하는 것이 좋을 것 같다.