Megjelent a MariaDB 11.8.5

A MariaDB projekt bejelentette a MariaDB 11.8.5, kritikus hibajavítást tartalmazó kiadását, melyre érdemes a lehető leghamarabb frissíteni MariaDB 11.8.4-ről.

MariaDB ikon
MariaDB ikon

A MariaDB projekt bejelentette a MariaDB 11.8.5, kritikus hibajavítást tartalmazó kiadását, melyre érdemes a lehető leghamarabb frissíteni MariaDB 11.8.4-ről.

Az említett kritikus hiba a MariaDB legutóbbi, 11.8.4-es kiadásában mutatkozott be. A hiba a MyISAM és Aria motorokat használó táblákat érinti, az InnoDB-t nem. A hiba a DELETE parancsban van. Ha a DELETE utasítás olyan WHERE klauzulát tartalmaz, ami egyenlőséget vizsgál egy olyan oszlopon ami indexált, de a benne lévő adatok nem egyediek, akkor amennyiben a végrehajtási terv „range” műveletet tartalmaz, nem minden adat kerül törlésre.

Egy kicsit macerásan hangzik, lássuk gyakorlatban. A szemléltetéshez a hibát javító commit-ban lévő teszteket használtam

Hozzuk létre a minta táblát és adjuk hozzá a teszt adatokat:

create table t1 (id varchar(32), d1 char, key (id), key (d1)) engine=myisam;
insert into t1 values ('1','A'), ('1','B'), ('1','C'), ('2','D'), ('2','E');

Tehát van 5 sorunk:

select count(*) from t1;
5

Kérdezzük le a végrehajtási tervet:

explain delete from t1 where id = '1';
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	range	id	id	131	NULL	3	Using where

„Range” a művetet típusa

Töröljünk:

delete from t1 where id = '1';

Ha minden rendben van, akkor csak annak a két sornak kellene megmaradnia, aminek az id oszlopában "2" van.

A hiba miatt viszont előfordul, hogy olyan sorok is megmaradnak, aminek az id oszlopa 1-et tartalmaz.

MariaDB 11.8.5