MySQL - 版本

Hello, 有志於數據庫的愛好者們!我很興奮能夠為您帶領進入MySQL版本的精彩世界。作為您友善的鄰居計算機老師,並且擁有多年經驗,我會確保我們輕鬆愉快地探索這個主題。所以,拿起你的虛擬筆記本,我們一起來看看!

MySQL - Versions

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() 函数 使用 SELECTLIMIT 子句
SQL_CALC_FOUND_ROWS 使用 SELECT COUNT(*)

記住,"棄用"並不意味著這些功能會在一夜之間消失。這更像是友好的提醒,它們可能不會在未來的版本中存在,所以最好開始使用替代方案。

總結來說,MySQL 8.0就像是數據庫管理的瑞士軍刀 - 擁有強大的新工具,同時簡化了一些舊工具。在你繼續你的MySQL旅程時,請記住,每個版本都帶來新的可能性和改進。保持好奇心,繼續嘗試,最重要的是,與你的數據庫一起玩得開心!

Credits: Image by storyset