MySQL創新版9.1.0於2024年10月15日正式釋出。此外,MySQL8.0.40及8.4.3修補程式版本也同時釋出。8.4.3是目前MySQL的LTS長期支持版本,該版本中將不會增加新的功能與特性,僅提供錯誤修復。新功能與新特性僅在創新版中釋出。讓我們一起快速瀏覽一下9.1.0中有哪些新的內容。
DDL原子性: MySQL已經支持DDL操作的原子性,但是在之前版本中的「CREATE DATABASE」 和 「DROP DATABASE」並沒有實作真正的崩潰安全,原因在於當作業系統上的數據庫目錄建立後如果「CREATE DATABASE」語句沒有成功送出,該目錄並不會刪除,需要手動進行刪除,反之,目錄刪除後,「DROP DATABASE」沒有成功送出會造成系統錯誤。該問題已經在新版本中解決。
審計和防火墻 :在之前的版本中,審計和防火墻功能會認為非字母開頭的使用者名稱稱為無效使用者,例如,「$foo」。在該版本中已解決該問題。
關於編譯 :編譯部份中修復了大量的相容性問題,並作出一些改進,其中「SQL_I_list」 使用成員欄位 「next」 來跟蹤指向下一個物件的指標,該指標欄位在構造列表物件時初始化為成員欄位的地址。預設的設定運算子采用的是成員級賦值,只有使用常規建構函式構造的列表物件才適用,這不適用於空列表。因此,新版本透過提供自訂的移動建構函式和賦值操作符函數來解決這個問題。此外,新版本還將「save_and_clear()」的實作更改為使用「std::move()」而不是賦值操作。感謝騰訊團隊和Xingyu Yang對該修復的貢獻。
SQL函數與操作 :
新版本解決了當將DATABASE()函數用作 UNION 查詢的一部份時輸出被截斷問題。
在某些情況下,當使用DISTINCT時,相同的值進行SUM()會產生不同的結果。例如,
mysql> SELECT SUM(b'1100'), SUM(DISTINCT b'1100');+--------------+-----------------------+| sum(b'1100') | sum(DISTINCT b'1100') |+--------------+-----------------------+|12 |9 |+--------------+-----------------------+
這是因為在使用「DISTINCT」時,會建立一個臨時的表用於保存值,以便在最後將產生唯一的值返回給使用者。之前建立這樣的表時,沒有考慮到已經確定的數據類別和長度,對它們重新計算。現在則考慮已經確定的數據類別和長度。
JavaScript:
let result = session.runSql("SELECT * FROM t")for (let row of result) {console.log(row.c1+row.c3);}
JavaScript現在完全支持VECTOR類別儲存程式。向量現在可以用作輸入參數,輸出參數,預處理語句bind()參數,並返回值。
Keyring :
從所有MySQL密匙環相關的元件中移除 對不安全的AES ECB的支持。
可插拔認證 :
「SET PERSIST」中解決了「Authentication_ldap_simple_bind_root_pwd =password」沒有實際保存密碼的錯誤。
SQL語法 :
mysql> CREATE VIEW v1 AS SELECT c1, c3 FROM t1;Query OK, 0 rows affected (0.01 sec)mysql> CREATE VIEW v1 AS SELECT c2 FROM t1;ERROR 1050 (42S01): Table 'v1' already existsmysql> CREATE VIEW IF NOT EXISTS v1 AS SELECT c2 FROM t1;Query OK, 0 rows affected, 1 warning (0.01 sec)mysql> SHOW WARNINGS;+-------+------+---------------------------+| Level | Code | Message|+-------+------+---------------------------+| Note | 1050 | Table 'v1' already exists |+-------+------+---------------------------+1 row in set (0.00 sec)mysql> SHOW CREATE VIEW v1\G*************************** 1. row *************************** View: v1 Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`vuser`@`localhost` SQLSECURITY DEFINER VIEW `v1` AS select `t1`.`c1` AS `c1`,`t1`.`c3` AS `c3` from `t1`character_set_client: utf8mb4collation_connection: utf8mb4_0900_ai_ci1 row in set (0.00 sec)
「IF NOT EXISTS」與「OR REPLACE」不相容,並且這兩個從句不能同時使用「CREATE VIEW」語句。嘗試這樣做會導致語句將以語法錯誤被拒絕。
向量數據類別 :STRING_TO_VECTOR()函數現在允許在VECTOR參數的字串表示形式中尾隨空格。解析器現在會在數碼之後、方括弧之前、方括弧之後或這些值的任何組合中裁剪空白字元。一些以前不支持的值現在被允許的例子如下:
"[1 ,2]""[1,2 ]"" [1,2]""[1,2] "
組復制 :在下列情況下添加了新的INFO級別日誌訊息:
1、當一個動作開始在所有節點
2、當發送訊息被阻塞而等待完成動作
3、當收到訊息和內部訊息時計數器遞減
為了保持輸出的一致性,當「explain_json_format_version=2」,以及當使用「EXPLAIN FORMAT=」TREE時, 「EXPLAIN FORMAT=JSON」為「lookup_condition」所顯示的條件中的「=」符號前後都添加了空格。
以上內容是MySQL9.1.0為大家帶來的新內容,除此之外還有大量的錯誤修復,詳細資訊請存取官網手冊。