SQL синтаксис
Конструктори на стойности са друго подобрение към стандарта позволяващо създаването на редове в
VALUES израза (да не се бърка с ключовата дума
VALUES за
INSERT изрза). Поради конфликт с името на
VALUES функцията е необходимо да се ползва разширената форма с
ROW конструктор. Основно това означава, че самостоятелния израз
VALUES ROW(1), ROW(2), ROW(3) сега се разбира правилно от сървъра.
VALUES израза може да се използва също в обединения, съединения, като производна таблица и в други случаи където можете да ползвате SELECT. Виж статията
VALUES израз в документацията за повече подробности.
Новия
TABLE израз реализира друга възможност от стандарта - явни клаузи за таблица. Той също може да се ползва като
SELECT, защото
TABLE t е също като
SELECT * FROM t, така че може да се ползва в обединения, с
INTO, в
IN подзаявка и всякъде другаде където
SELECT може да се ползва.
Вече е възможно да се ползва псевдоним за новия ред и допълнително колони с
INSERT ... ON DUPLICATE KEY UPDATE израз след
VALUES или
SET клаузи с изпулването на
AS ключова дума. Предполагам това е първата стъпка към премахването на
VALUES функцията (виж отгоре) за по-добра поддръжка на стандарта. Можете да намерите повече в статията
ON DUPLICATE KEY UPDATE Statement.
Промени по типове данни
Типовете TIMESTAMP и DATETIME вече могат да включват информация за времева зона като корекция (напр. +02:00 или -08:00) добавена към стойността. Подробностите са в статията
The DATE, DATETIME, and TIMESTAMP Types в документацията.
Типа
YEAR(4) (т.е. с явна дължина на показване) и (недокументираният)
UNSIGNED атрибут за
YEAR са вече остарели и ще бъдат премахнати в бъдеще. Това следва други премахвания на дължини на показване и други атрибути с 8.0.17 за които
писах преди, така че разработчиците трябва да проверят и поправят всеки SQL скрипт използващ остарели типове данни и атрибути. С тази версия изрази, които печатат определения на типове данни (напр.
SHOW CREATE TABLE) вече не показват дължина на показване за целочислени типове с изключение на
TINYINT(1)
и
ZEROFILL
атрибута.
Други промени в сървър
InnoDB машината вече поддържа ефективно взимане на проби от данни за
хистограми. Взимането на проби вече не изисква пълно сканиране на таблица, което може да е скъпо за големи таблици, а взима проби от страниците с данни на клъстерирания индекс вместо това. Трябва да пробвам при първа възможност.
Бъгове оправени в сървър
Докладвания преди проблем с
EXPLAIN ANALYZE неизпълняващ и докладващ заявки в SELECT списъка беше оправен (виж бъг
97296).
Workbench
Четейки в
бележките към новата версия, че "
The following MySQL server language features are now supported: value references in INSERT statements, new options (TLS version, cipher suite, compression, and privilege check) in CHANGE MASTER TO replication statements, random passwords in CREATE USER and ALTER USER statements, EXPLAIN ANALYZE, and binary collation names." бях обнадежден, че приложението най-накрая наваксва със сървъра, но това беше докато на прегледах новия SQL синтаксис (виж отгоре).
Два от бъговете, които докладвах преди бяха оправени -
97416 (за
EXPLAIN ANALYZE) и
97281 (за
ANALYZE TABLE ... UPDATE HISTOGRAM), но отворих два нови за
TABLE (виж бъг
98263) и
VALUES (виж бъг
98266) изразите. Тези проблеми са очевидни, но все още ми е странно как продължават да се появяват.
Има нов елемент "Copy Row (with names, tab separated)" в контекстното меню за копиране на заглавия и редове от получените данни с табулация като разделител, което прави лесно преместването на данни към Excel или LibreOffice Calc.
Щастливо ползване и експериментиране с новите MySQL версии!