自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL 9.0 GA 來(lái)了!

數(shù)據(jù)庫(kù) MySQL
MySQL 官方終于發(fā)布了大版本號(hào)變更得 9.0 版本,接下來(lái)由我給大家介紹 MySQL 在 9.0 版本中有哪些新的變化。

2024 年 7 月 2 日,MySQL 9.0 GA 版本正式發(fā)布。還記得 MySQL 8.0 版本正式發(fā)布于 2018 年 4 月 19 日,中間經(jīng)過(guò)了 6 年之久,MySQL 官方終于發(fā)布了大版本號(hào)變更得 9.0 版本,接下來(lái)由我給大家介紹 MySQL 在 9.0 版本中有哪些新的變化。本文包含如下內(nèi)容:

  • MySQL 9.0 中添加或更改的功能
  • MySQL 9.0 中已棄用的功能
  • MySQL 9.0 中刪除的功能

一、MySQL 9.0 中添加或更改的功能

MySQL 9.0 添加了以下功能:

  • 保存 EXPLAIN 分析 JSON 輸出
  • DDL 語(yǔ)句新增 Event 語(yǔ)法
  • 性能模式新添加了兩個(gè)新表

1.保存 EXPLAIN 分析 JSON 輸出

從 MySQL 9.0.0 開(kāi)始,現(xiàn)在支持使用下方得新語(yǔ)法 將 EXPLAIN 分析的 JSON 輸出保存到用戶變量中:

EXPLAIN ANALYZE FORMAT=JSON INTO @variable select_stmt

隨后,該變量可用作任何 MySQL JSON 函數(shù)的 JSON 參數(shù)( Section 15.1.13, “CREATE EVENT Statement”)。只有 FORMAT=JSON 時(shí)才支持 INTO 子句;必須明確指定 FORMAT。這種形式的 EXPLAIN ANALYZE 還支持可選的 FOR SCHEMA 或 FOR DATABASE 子句。

注意:僅當(dāng) explain_json_format_version 服務(wù)器系統(tǒng)變量設(shè)置為 2 時(shí),此功能才可用;否則,嘗試使用它會(huì)引發(fā) ER_EXPLAIN_ANALYZE_JSON_FORMAT_VERSION_NOT_SUPPORTED (EXPLAIN ANALYZE 不支持 FORMAT=JSON 且解釋_json_format_versinotallow=1)。

解釋

這里直接給大家看看官網(wǎng)得例子,方便理解:

mysql> EXPLAIN FORMAT=JSON INTO @myselect
    ->     SELECT name FROM a WHERE id = 2;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @myselect\G
*************************** 1. row ***************************
@myex: {
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "1.00"
    },
    "table": {
      "table_name": "a",
      "access_type": "const",
      "possible_keys": [
        "PRIMARY"
      ],
      "key": "PRIMARY",
      "used_key_parts": [
        "id"
      ],
      "key_length": "4",
      "ref": [
        "const"
      ],
      "rows_examined_per_scan": 1,
      "rows_produced_per_join": 1,
      "filtered": "100.00",
      "cost_info": {
        "read_cost": "0.00",
        "eval_cost": "0.10",
        "prefix_cost": "0.00",
        "data_read_per_join": "408"
      },
      "used_columns": [
        "id",
        "name"
      ]
    }
  }
}
1 row in set (0.00 sec)

大家都知道 EXPLAIN 可以用于分析 SQL 語(yǔ)句,在 MySQL 9.0 中,EXPLAIN 得語(yǔ)法發(fā)生了變化,在查詢語(yǔ)句 EXPLAIN FORMAT=JSON INTO @myselect SELECT name FROM a WHERE id = 2中,EXPLAIN 后面可以接上 FORMAT=JSON INTO @myselect 語(yǔ)句,這樣我們將 EXPLAIN 得輸出結(jié)果保存到變量 myselect 中。

在保存到變量 myselect 中后,我們就可以使用 MySQL JSON 函數(shù)處理該變量,就像處理任何其他 JSON 值一樣,如以下使用 JSON_EXTRACT() 的示例所示:

mysql> SELECT JSON_EXTRACT(@myselect, "$.query_block.table.key");
+----------------------------------------------------+
| JSON_EXTRACT(@myselect, "$.query_block.table.key") |
+----------------------------------------------------+
| "PRIMARY"                                          |
+----------------------------------------------------+
1 row in set (0.01 sec)

mysql> SELECT JSON_EXTRACT(@myupdate, "$.query_block.table.access_type") AS U_acc,
    ->        JSON_EXTRACT(@mydelete, "$.query_block.table.access_type") AS D_acc;
+---------+-------+
| U_acc   | D_acc |
+---------+-------+
| "range" | "ALL" |
+---------+-------+
1 row in set (0.00 sec)

關(guān)于 EXPLAIN 語(yǔ)句更多新的使用方式,大家可以參閱https://dev.mysql.com/doc/refman/9.0/en/explain.html#explain-execution-plan。

2.DDL 語(yǔ)句新增 Event 語(yǔ)法

從 MySQL 9.0.0 開(kāi)始,可以使用以下 Event 語(yǔ)法:

  • CREATE EVENT(創(chuàng)建事件)
  • ALTER EVENT(修改事件)
  • DROP EVENT(刪除事件)

EVENT 語(yǔ)句不支持使用占位符參數(shù)(?)。我們必須根據(jù)字符串文字、系統(tǒng)變量和用戶變量的某種組合來(lái)組裝要準(zhǔn)備的語(yǔ)句文本。

EVENT 語(yǔ)句語(yǔ)法如下,

CREATE
    [DEFINER = user]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON {REPLICA | SLAVE}]
    [COMMENT 'string']
    DO event_body;

schedule: {
    AT timestamp [+ INTERVAL interval] ...
  | EVERY interval
    [STARTS timestamp [+ INTERVAL interval] ...]
    [ENDS timestamp [+ INTERVAL interval] ...]
}

interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

EVENT 語(yǔ)句的語(yǔ)法看著比較復(fù)雜,參數(shù)眾多,實(shí)際掌握一些常用參數(shù)就好了。常用語(yǔ)法如下,

CREATE EVENT 事件名
    ON SCHEDULE AT 或者 EVERY + 指定時(shí)間間隔
    DO 接 SQL 語(yǔ)句

EVENT 后面跟事件名,ON SCHEDULE 后面可以跟 AT 或者 EVERY 表示指定時(shí)間或者每隔一段時(shí)間,DO 后面接 SQL 語(yǔ)句,表示當(dāng)滿足時(shí)間條件后要執(zhí)行的 SQL 語(yǔ)句。

解釋

Event 語(yǔ)句提供的功能跟定時(shí)任務(wù)相似,它可以在 MySQL 中定時(shí)執(zhí)行一些 SQL 語(yǔ)句。還可以用于 MySQL 的存儲(chǔ)過(guò)程中。接下來(lái)給大家提供一個(gè)官網(wǎng)例子,供大家理解,

CREATE EVENT myevent
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    DO
      UPDATE myschema.mytable SET mycol = mycol + 1;

上面的語(yǔ)句創(chuàng)建了一個(gè)名為 myevent 的事件。該事件執(zhí)行一次(創(chuàng)建后一小時(shí)),方法是運(yùn)行一條 SQL 語(yǔ)句,將 myschema.mytable 表的 mycol 列的值加 1。

關(guān)于 Event 語(yǔ)法更多新的使用方式,大家可以參閱 https://dev.mysql.com/doc/refman/9.0/en/create-event.html。

3.性能模式新添加了兩個(gè)新表

(1) Variables_metadata 表

Variables_metadata 表提供有關(guān)系統(tǒng)變量的一般信息。此信息包括 MySQL 服務(wù)器識(shí)別的每個(gè)系統(tǒng)變量的名稱、范圍、類型、范圍(如果適用)和描述。

該表中的兩列(MIN_VALUE 和 MAX_VALUE)旨在替換 Variables_info 表中已棄用的列。

Variables_metadata 表顯示每個(gè)服務(wù)器系統(tǒng)變量的名稱、范圍、類型、值范圍(如果適用)和說(shuō)明。

(2) global_variable_attributes 表

global_variable_attributes 表提供有關(guān)服務(wù)器分配給全局系統(tǒng)變量的屬性值對(duì)的信息。

global_variable_attributes 表就是把 MySQL 服務(wù)器已為全局變量(例如 offline_mode 或 read_only)設(shè)置的屬性及其值的信息用表格式用作展示。

(3) 解釋

性能模式新添加的兩個(gè)新表就是方便大家直接在 MySQL cli 模式中直接查詢系統(tǒng)變量以及全局變量。

有關(guān)這兩個(gè)表的詳細(xì)說(shuō)明,大家可以參閱官網(wǎng):https://dev.mysql.com/doc/refman/9.0/en/performance-schema-system-variable-tables.html。

二、MySQL 9.0 中已棄用的功能

以下功能在 MySQL 9.0 中已棄用,并且可能會(huì)在未來(lái)的系列中刪除。如果 MySQL 更新說(shuō)明中有顯示替代方案,則你們應(yīng)更新應(yīng)用程序并使用它們。

對(duì)于使用 MySQL 9.0 中已棄用且已在更高 MySQL 版本中刪除的功能的應(yīng)用程序,從 MySQL 9.0 源復(fù)制的語(yǔ)句到運(yùn)行更高版本的副本時(shí),語(yǔ)句可能會(huì)執(zhí)行失敗,或者可能對(duì)源和副本產(chǎn)生不同的影響。為了避免此類問(wèn)題,應(yīng)修改使用 9.0 中已棄用功能的應(yīng)用程序以避免這些問(wèn)題,并盡可能使用替代方案。以下內(nèi)容為棄用功能,

性能模式 variables_info 表列

性能模式 variables_info 表的 MIN_VALUE 和 MAX_VALUE 列現(xiàn)已棄用,并且可能會(huì)在未來(lái)的 MySQL 版本中刪除。相反請(qǐng)使用 Variables_metadata 表中具有相同名稱的列(請(qǐng)參閱上文章節(jié))。

三、MySQL 9.0 中刪除的功能

以下功能已過(guò)時(shí)并已在 MySQL 9.0 中刪除。如果 MySQL 更新說(shuō)明中有顯示替代方案,則你們應(yīng)更新應(yīng)用程序并使用它們。

對(duì)于使用 MySQL 9.0 中刪除的功能的 MySQL 8.4 應(yīng)用程序,從 MySQL 8.4 源復(fù)制到 MySQL 9.0 副本時(shí),語(yǔ)句可能會(huì)執(zhí)行失敗,或者可能對(duì)源和副本產(chǎn)生不同的影響。為了避免此類問(wèn)題,應(yīng)修改使用 MySQL 9.0 中刪除的功能的應(yīng)用程序以避免這些問(wèn)題,并盡可能使用替代方案。

mysql_native_password 插件。mysql_native_password 身份驗(yàn)證插件已在 MySQL 8.0 中棄用,已被刪除。服務(wù)器現(xiàn)在拒絕來(lái)自不具有 CLIENT_PLUGIN_AUTH 功能的舊客戶端程序的 mysql_native 身份驗(yàn)證請(qǐng)求。由于此更改,以下服務(wù)器選項(xiàng)和變量也已被刪除:

  • --mysql-native-password 服務(wù)器選項(xiàng)
  • --mysql-native-password-proxy-users 服務(wù)器選項(xiàng)
  • default_authentication_plugin 服務(wù)器系統(tǒng)變量

給大家介紹一下 mysql_native_password 插件。

1.mysql_native_password 介紹

從 MySQL 8.0.4 開(kāi)始,MySQL 默認(rèn)身份驗(yàn)證插件從 mysql_native_password 改為 caching_sha2_password 。相應(yīng)地,libmysqlclient 也使用 caching_sha2_password 作為默認(rèn)的身份驗(yàn)證機(jī)制。

2.刪除起因

在這之前 MySQL 5.6/5.7 使用的默認(rèn)密碼插件是 mysql_native_password。mysql_native_password 的特點(diǎn)是不需要加密的連接。該插件驗(yàn)證速度特別快,但是不夠安全,因?yàn)椋琺ysql_native_password 使用的是于 SHA1 算法,NIST(美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院)在很早之前就已建議停止使用 SHA1 算法,因?yàn)?SHA1 和其他哈希算法(例如 MD5)容易被破解。

其實(shí)從 MySQL 5.6 開(kāi)始就引入了更安全的認(rèn)證機(jī)制:ha256_password 認(rèn)證插件。它使用一個(gè)加鹽密碼(salted password)進(jìn)行多輪 SHA256 哈希(數(shù)千輪哈希,暴力破解更難),以確保哈希值轉(zhuǎn)換更安全。但是,建立安全連接和多輪 hash 加密很耗費(fèi)時(shí)間。雖然安全性更高,但是驗(yàn)證速度不夠快。

3.改進(jìn)

MySQL 試圖結(jié)合二者的優(yōu)點(diǎn)。于是在 MySQL 8.0.3 版本引入了一個(gè)新的身份驗(yàn)證插件 caching_sha2_password ,作為 sha256_password 的代替方案,在 sha256_password 的基礎(chǔ)上進(jìn)行了改進(jìn)補(bǔ)上了短板,既解決安全性問(wèn)題又解決性能問(wèn)題。與此同時(shí) sha256_password 將退出時(shí)代的浪潮。MySQL 預(yù)計(jì)在未來(lái)版本中將其刪除。使用 sha256_password 進(jìn)行身份驗(yàn)證的 MySQL 賬戶建議轉(zhuǎn)為 caching_sha2_password。

其實(shí) MySQl 早就想在 8.0 版本中替換到 mysql_native_password 插件,到了 9.0 版本直接刪除 mysql_native_password 功能其實(shí)提前跟大家打過(guò)招呼。

有關(guān)認(rèn)證插件的更多問(wèn)題,大家可以參閱官網(wǎng) https://dev.mysql.com/doc/refman/9.0/en/authentication-plugins.html

總結(jié)

MySQL 9.0 版本新增了 EXPLAIN 分析 JSON 輸出、DDL 語(yǔ)句新增 Event 語(yǔ)法、性能模式新添加了兩個(gè)新表,棄用了老版本中的 variables_info 表,刪除了 mysql_native_password 認(rèn)證插件。

這些更新沒(méi)有帶來(lái)大的功能改動(dòng),對(duì)于大多數(shù)應(yīng)用程序來(lái)說(shuō)影響很小,沒(méi)有當(dāng)年 MySQL 5.7 發(fā)布時(shí)帶來(lái)的 innodb 存儲(chǔ)引擎那種給人帶來(lái)的激動(dòng)感,更新說(shuō)明中也沒(méi)有強(qiáng)調(diào)性能改進(jìn)(估計(jì)性能對(duì)比 8.4 版本提升不大)。不過(guò)這也說(shuō)明關(guān)系型數(shù)據(jù)庫(kù) MySQL 如今的功能以及穩(wěn)定性方面都已經(jīng)越來(lái)越完善。

OK,這里也是祝賀 MySQL 9.0 GA 版本的發(fā)布,MySQL 作為開(kāi)源界的數(shù)據(jù)庫(kù)一哥,地位早已無(wú)法撼動(dòng)。相信新版本將進(jìn)一步鞏固 MySQL 在數(shù)據(jù)庫(kù)領(lǐng)域的領(lǐng)先地位,為數(shù)據(jù)庫(kù)應(yīng)用帶來(lái)更多可能性。

責(zé)任編輯:趙寧寧 來(lái)源: 程序員wayn
相關(guān)推薦

2022-04-22 21:13:49

AlmaLinuxLinuxLinux 發(fā)行版

2012-02-21 09:18:54

MySQL

2010-03-18 13:10:59

MySQL

2015-10-20 09:25:41

數(shù)據(jù)庫(kù)mysql

2012-01-11 14:07:08

數(shù)據(jù)庫(kù)MySQL

2013-04-03 10:04:36

MySQL 5.6

2010-05-13 13:39:06

2010-08-12 15:41:12

MySQL集群

2011-03-21 13:31:20

MyEclipse

2021-03-05 13:08:56

MySQL數(shù)據(jù)庫(kù)命令

2009-12-03 15:47:03

Suse Linux

2011-12-20 10:50:29

Firefox發(fā)布

2025-01-15 10:02:09

APIVueDOM

2021-04-16 16:21:02

鴻蒙HarmonyOS應(yīng)用開(kāi)發(fā)

2024-05-08 08:50:39

React19模式UI

2010-02-03 13:25:34

云計(jì)算

2009-12-07 12:52:47

UPS鐵路客運(yùn)

2009-09-01 13:26:42

JBossWS 3.2

2011-12-14 09:14:46

JavaJ2EESpring
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)