MySQL - 버전
안녕하세요, 데이터베이스 열정가 되시고자 하는 분들께! MySQL 버전의 흥미로운 세상을 안내해드리게 되어 매우 기쁩니다. 여러분의 친절한 이웃 컴퓨터 교사로서 오랜 경험을 가지고 있기 때문에, 이 주제를 쉽고 즐겁게 탐험할 수 있도록 도와드리겠습니다. 그럼 가상의 메모지를 준비하고, 시작해보겠습니다!
MySQL 버전
MySQL은 고급 와인처럼 시간이 지나면서 더욱 발전해왔습니다. 1995년 첫 등장 이후 많은 업데이트와 개선이 이루어졌습니다. 몇 가지 주요 버전을 빠르게 돌아보겠습니다:
MySQL 3.23 (2001)
이 버전은 다음과 같은 혁신적인 기능을 도입했습니다:
- 풀텍스트 인덱싱
- 레플리케이션
- 쿼리 캐시
MySQL 4.0 (2003)
이 배포판은 다음과 같은 흥미로운 추가 기능을 제공했습니다:
- 유니온 쿼리
- 서브쿼리
- GIS 함수
MySQL 5.0 (2005)
중요한里程 돌로, 다음을 도입했습니다:
- 저장 프로시저
- 뷰
- 트리거
MySQL 5.5 (2010)
성능 향상에 중점을 두었습니다:
- InnoDB를 기본 스토리지 엔진으로
- 반동기식 레플리케이션
MySQL 5.6 (2013)
성능과 확장성을 향상시켰습니다:
- 온라인 DDL 연산
- 향상된 레플리케이션 성능
MySQL 5.7 (2015)
다음과 같은 중요한 업데이트를 포함합니다:
- JSON 지원
- 향상된 보안 기능
- 성능 스키마 개선
MySQL 8.0 (2018)
곧 더 자세히 탐구할 최신 주요 버전입니다!
MySQL 8.0에서 추가된 기능
MySQL 8.0은 데이터베이스 버전의 슈퍼 헴으로, 새로운 힘과 능력을 가득 채웠습니다. 몇 가지 가장 멋진 기능을 탐구해보겠습니다:
1. 문서 저장소
MySQL은 이제 JSON 문서를 저장하고 쿼리할 수 있는 하이브리드 관계형 및 문서 데이터베이스가 되었습니다. 간단한 예제를 보겠습니다:
CREATE TABLE products (
id INT PRIMARY KEY,
details JSON
);
INSERT INTO products VALUES (1, '{"name": "Laptop", "price": 999.99, "specs": {"RAM": "16GB", "CPU": "i7"}}');
SELECT JSON_EXTRACT(details, '$.name') AS product_name
FROM products
WHERE JSON_EXTRACT(details, '$.price') < 1000;
이 코드는 JSON 열을 가진 테이블을 생성하고, 중첩된 세부 정보를 가진 제품을 삽입한 다음, JSON 속성을 기준으로 쿼리합니다.
2. 윈도우 함수
윈도우 함수는 현재 행과 관련된 행 집합에 대한 계산을 수행할 수 있습니다. 예제를 보겠습니다:
SELECT
product_name,
category,
price,
AVG(price) OVER (PARTITION BY category) AS avg_category_price
FROM products;
이 쿼리는 각 카테고리의 평균 가격과 개별 제품 가격을 함께 계산합니다.
3. 공통 테이블 표현식 (CTEs)
CTEs는 복잡한 쿼리를 더 읽기 쉽게 만듭니다. 간단한 예제를 보겠습니다:
WITH high_value_customers AS (
SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING SUM(total_amount) > 10000
)
SELECT c.name, c.email
FROM customers c
JOIN high_value_customers hvc ON c.id = hvc.customer_id;
이 쿼리는 먼저 고가 고객을 정의한 CTE를 만들고, 그것을 주 쿼리에서 사용합니다.
4. 숨겨진 인덱스
이제 인덱스를 테스트 목적으로 숨길 수 있습니다:
ALTER TABLE customers ALTER INDEX idx_email INVISIBLE;
이렇게 하면 인덱스의 영향을 실제로 제거하지 않고 테스트할 수 있습니다.
5. 향상된 SQL 역할
MySQL 8.0은 더 강력한 역할 기반 접근 제어를 도입합니다:
CREATE ROLE 'app_developer', 'app_read', 'app_write';
GRANT SELECT ON app_db.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON app_db.* TO 'app_write';
GRANT 'app_read', 'app_write' TO 'app_developer';
CREATE USER 'jane'@'localhost' IDENTIFIED BY 'password123';
GRANT 'app_developer' TO 'jane'@'localhost';
이 예제는 다양한 권한을 가진 역할을 생성하고, 이를 사용자에 할당합니다.
MySQL 8.0에서 기능이廃止된 기능
MySQL이 진화함에 따라 일부 기능은 시간이 지나면서 오래되었습니다. 새로운 것을 위한 공간을 만들기 위해 가끔은 옷장을 정리해야 합니다! MySQL 8.0에서廃止된 기능을 몇 가지 소개합니다:
廃止된 기능 | 대체/대안 |
---|---|
--skip-symbolic-links 옵션 |
--skip-symlink |
ENCRYPT() 함수 |
AES_ENCRYPT() 사용 |
DES_ENCRYPT() 및 DES_DECRYPT() 함수 |
AES_ENCRYPT() 및 AES_DECRYPT() 사용 |
FOUND_ROWS() 함수 |
SELECT 에 LIMIT 절 사용 |
SQL_CALC_FOUND_ROWS |
SELECT COUNT(*) 사용 |
记住, "廃止"이란 이 기능들이 밤이 되서 사라진 것은 아니라는 뜻입니다. 이는 앞으로의 버전에서는 사용되지 않을 수 있으므로, 대안을 사용하는 것이 좋다는 친절한 경고입니다.
결론적으로, MySQL 8.0은 데이터베이스 관리의 스위스 아ーノ이 knife와 같아서, 강력한 새로운 도구를 가득 채우고 있으면서도 일부 오래된 도구를 간소화했습니다. MySQL 여정을 계속하면서, 각 버전이 새로운 가능성과 개선을 가져온다는 점을 기억하세요. 호기심을 유지하고, 계속 실험하고, 가장 중요한 것은 데이터베이스에 즐거움을 느끼세요!
Credits: Image by storyset