Czkawka a Krokiet, grafické aplikace pro hledání duplicitních a zbytečných souborů, byly vydány ve verzi 11.0. Podrobný přehled novinek v příspěvku na Medium. Od verze 7.0 je vedle frontendu Czkawka postaveného nad frameworkem GTK 4 vyvíjen nový frontend Krokiet postavený nad frameworkem Slint. Frontend Czkawka je už pouze v udržovacím módu. Novinky jsou implementovány ve frontendu Krokiet.
Jiří Eischmann na svém blogu publikoval článek Úvod do MeshCore: "Doteď mě radioamatérské vysílání úplně míjelo. Když jsem se ale dozvěděl, že existují komunity, které svépomocí budují bezdrátové sítě, které jsou nezávislé na Internetu a do značné míry taky elektrické síti a přes které můžete komunikovat s lidmi i na druhé straně republiky, zaujalo mě to. Když o tom přede mnou pořád básnili kolegové v práci, rozhodl jsem se, že to zkusím taky.
… více »Byla vydána verze 0.5.20 open source správce počítačových her na Linuxu Lutris (Wikipedie). Přehled novinek v oznámení na GitHubu. Instalovat lze také z Flathubu.
Peter Steinberger, autor open source AI asistenta OpenClaw, nastupuje do OpenAI. OpenClaw bude převeden pod nadaci a zůstane otevřený a nezávislý.
Společnost Backblaze zveřejnila statistiky spolehlivosti pevných disků používaných ve svých datových centrech za rok 2025. Ke konci roku 2025 vlastnila 349 462 pevných disků. Průměrná AFR (Annualized Failure Rate), tj. pravděpodobnost, že disk během roku selže, byla 1,36 %. V roce 2024 to bylo 1,57 %. V roce 2023 to bylo 1,70 %. V roce 2022 to bylo 1,37 %.
Nástroj sql-tap je proxy mezi aplikací a databází, které zachytává všechny SQL dotazy a zobrazuje je v terminálovém rozhraní. Zde lze téměř v reálném čase zkoumat dotazy, sledovat transakce a spouštět SQL příkaz EXPLAIN. Podporované databázové systémy jsou pouze PostgreSQL a MySQL. Zdrojový kód je dostupný na GitHubu, pod licencí MIT.
Byla vydána nová verze 9.2 textového editoru Vim (Vi IMproved). Přináší vylepšené doplňování, podporu schránky ve Waylandu, podporu XDG Base Directory (konfigurace v $HOME/.config/vim), vylepšené Vim9 skriptování nebo lepší zvýrazňování změn. Vim zůstává charityware. Nadále vybízí k podpoře dětí v Ugandě. Z důvodu úmrtí autora Vimu Brama Moolenaara a ukončení činnosti jím založené charitativní organizace ICCF Holland projekt Vim navázal spolupráci s charitativní organizaci Kuwasha.
Byl představen editor MonoSketch, webová aplikace pro tvorbu diagramů, technických nákresů, flowchartů a různých dalších vizualizací, to vše jenom z ASCII znaků. Všechny operace běží pouze v prohlížeči uživatele a neprobíhá tedy žádné nahrávání dat na server. Zdrojový kód aplikace (drtivá většina Kotlin, žádné C#) je dostupný na GitHubu pod licencí Apache 2.0.
Byla vydána nová verze 3.7.0 multiplatformního svobodného frameworku pro zpracování obrazu G'MIC (GREYC's Magic for Image Computing, Wikipedie). Přehled novinek i s náhledy nových filtrů na PIXLS.US.
Všem na AbcLinuxu vše nejlepší k Valentýnu aneb Dni lásky ke svobodnému softwaru (I love Free Software Day, Mastodon, 𝕏).
Pokud jste se už naučili jazyk SQL, můžete se svými znalostmi vytvořit dobře strukturovanou databázi, pomocí příkazů SQL ji můžete dokonce zaplnit daty a dotazy z ní získávat data. Nenechte se tím zmást a vězte, že jste stále ještě na začátku cesty poznání databázového systému MySQL.
Dnes se seznámíte s trochu pokročilejšími aspekty tvorby databází - klíči a zamykáním záznamů.
Při předchozím studiu jste se setkali s primárními klíči. Dnes se budu zabývat klíči komplexněji.
Klíče (nebo také indexy) urychlují vyhledávání v databázi. Pokud přidáme do tabulky klíč, vlastně ji setřídíme.
WHERE.
Pokud se tedy pole často vyskytuje v příkazu WHERE, je vhodné
přiřadit mu klíč.ORDER
BY a GROUP BY.MIN() a
MAX()(
Poznámka ke konvenci zápisu syntaxe příkazů:
ALTER TABLE tabulka ADD {KEY | INDEX} index ({sloupec1, sloupec2,...});
ALTER TABLE tabulka ADD UNIQUE index ({sloupec1, sloupec2,...});
ALTER TABLE tabulka ADD PRIMARY KEY index ({sloupec1, sloupec2,...});
[slovo] - slovo uzavřené v těchto závorkách je
nepovinné
{slovo1, slovo2, slovo3} - minimálně jedno z uvedených slov
musí být uvedeno
[slovo1| slovo2] - jedno z těchto slov bude může být nepovinně
uvedeno
)
Pokud budete chtít klíč odstranit, nahradíte slovo ADD slovem
DROP
Toto je upřednostňovaný postup při vytváření klíčů. Můžete ale také použít tyto příkazy:
CREATE INDEX index ON tabulka ({sloupec1, sloupec2,...}]);
CREATE UNIQUE INDEX [index] ON tabulka ({sloupec1, sloupec2,...});
CREATE PRIMARY KEY ON tabulka ({sloupec1, sloupec2});
Klíče můžete také definovat při vytváření tabulky:
CREATE TABLE tabulka (sloupec datovýtyp [NULL | NOT NULL],
KEY col_index(sloupec));
Informace o klíčích v dané tabulce zobrazíte pomocí příkazu:
SHOW {KEYS | INDEX} FROM tabulka
Jednopoložkové klíče jsou nejjednodušší klíče. Jednopoložkový klíč k
sloupci Jmeno_Prokuktu vytvoříte například takto:
ALTER TABLE Produkty ADD KEY produkt_idx (Jmeno_Produktu);
Pokud k definici klíče použijete více než jedno pole, vytvoříte vícepoložkový klíč. Vícepoložkový klíč vytvoříte například takto:
ALTER TABLE Produkty ADD KEY sloz_idx (Jmeno_Produktu, Zeme_Puvodu, Barva);
Rozdíl mezi jednoduchým a složeným klíčem můžete vidět v následující tabulce:
| Jmeno_Produktu | Zeme_Puvodu | Barva | produkt_idx | sloz_idx |
| Monitor | China | Šedá | Monitor | MonitorChinaŠedá |
| Myš | Japan | Šedá | Myš | MyšJapanŠedá |
| Klávesnice | Japan | Černá | Klávesnice | KlávesniceJapanČerná |
Zkuste po vytvoření složeného indexu zadat příkaz:
SHOW KEYS FROM tabulka;
Jmeno_Produktu je více omezující než sloupec
Zeme_puvodu).Částečné klíče se používají pro indexování určitého počtu prvních znaků sloupce textového datového typu.
Částečné klíče je vhodné použít, pokud by mohl být indexovaný sloupec příliš dlouhý. Částečný klíč vytvoříte například takto:
ALTER TABLE Produkty ADD KEY produkt_idx (Jmeno_Produktu(5));
Složený klíč můžete samozřejmě skládat i z částečných klíčů.
Používání částečných klíčů je výhodné, protože bývají kratší a jejich výkon je tedy zpravidla vyšší.
Jedinečné klíče nedovolují v indexovaných polích existenci duplicitních položek. Tabulka může obsahovat více než jeden jedinečný klíč. Jedinečný klíč vytvoříte příkazem:
ALTER TABLE tabulka ADD UNIQUE index (pole[...]);
Primární klíč je speciální typ jedinečného klíče. Na rozdíl od běžného
jedinečného klíče smí být v tabulce pouze jeden primární klíč a pole
definované jako primární klíč nesmí obsahovat prázdné hodnoty
(NULL).
Primární klíč se používá pro vytvoření relace mezi tabulkami.
Pokud nelze jedinečnost primárního klíče zajistit pomocí jednoho pole,
používá se vícepoložkový primární klíč. Vícepoložkový primární klíč nelze
vytvořit pomocí příkazu CREATE TABLE, ale jedině pomocí
příkazu ALTER TABLE. Složený primární klíč vytvoříte
například takto:
ALTER TABLE Produkty ADD PRIMARY KEY (Jmeno_Produktu, Zeme_Puvodu);
Pokud vytvoříte takový primární klíč, nebudete moci mít v dané tabulce více produktů stejného názvu a stejné země původu!
Můžete samozřejmě vytvořit i složený částečný primární klíč.
Vytvoření primárního klíče z reálných dat bývá často nevhodné. Často se jen těžko hledá taková kombinace sloupců, která je pokaždé jiná.
V takových případech je nejlepší vytvořit syntetický klíč. To je sloupec speciálně vytvořený pro to, aby se stal primárním. Je to tedy sloupec, který obsahuje data, která bychom jinak nepotřebovali. V našem příkladě bychom vytvořili pro každý produkt jedinečné identifikační číslo.
Naši tabulku vytvoříte příkazem:
CREATE TABLE Produkty (ID_Produktu INT(8) AUTO_INCREMENT
PRIMARY KEY NOT NULL, Jmeno_Produktu VARCHAR(20), ...)
Fulltextové klíče jsou v MySQL poměrně nové - jejich podpora byla do MySQL přidána ve verzi 3.23.23.
Fulltextový klíč se smí vytvářet pouze ze sloupců typu
VARCHAR a TEXT. Fulltextový klíč vytvoříte
například takto:
ALTER TABLE Knihy ADD FULLTEXT INDEX (Nazev_Knihy, Ukazka);
V takto indexovaných sloupcích můžete použít velmi rychlé fulltextové
vyhledávání. Vyhledávání se realizuje pomocí klíčových slov
MATCH(pole_ve_kterem_chcete_hledat1, pole_ve_kterem_chcete_hledat2,
...) a AGAINST(hledaný výraz).
Pokud použijete klíčová slova MATCH a AGAINST
v klauzuli WHERE, výsledný výpis bude sestupně setřízený
podle četnosti hledaných slov v prohledávaných sloupcích.
Pokud hledaný výraz obsahuje víc slov, bere MySQL při výpočtu četnosti hledaných slov v prohledávaných sloupcích ohled i na to, jaké ze slov je obsaženo ve více záznamech. To, které je obsaženo ve více záznamech, má menší váhu (pokud je obsaženo v 50 a více procentech záznamů, tak nemá dokonce žádnou váhu - viz dále ), protože má menší sémantickou hodnotu. (slovo, které je v méně záznamech pravděpodobně určuje blíže, to co chcete najít)
Pozor:
MATCH() musí být
ze stejné tabulky a musí být částí stejného fulltextového klíče.AGAINST musí být řetězec.
.Od verze 4.0 podporuje MySQL v hledaných výrazech dokonce i booleanovské operátory. Můžete použít tyto operátory:
+ (+slovo znamená, že slovo musí
být obsaženo v každém záznamu)- (-slovo znamená, že slovo
nemusí být obsaženo v každém záznamu)< a > mohou být užity ke
zvýšení/snížení váhy slova~ může být použit k udělení negativní váhy slovu* zástupný operátorPříklady:
SELECT * FROM Knihy WHERE MATCH (Nazev_Knihy, Ukazka) AGAINST ('databáze');
Tento dotaz vrátí všechny záznamy obsahující ve sloupci
Nazev_Knihy nebo ve sloupci Ukazka slovo
databáze. Výpis bude sestupně setřízený podle procentuální
četnosti hledaných slov.
SELECT ID_Knihy, MATCH (Nazev_Knihy, Ukazka) AGAINST ('databáze') as Score
FROM Knihy;
Tento dotaz zobrazí sloupec ID_Knihy a sloupec
Score, ve kterém bude číslo (0 znamená, že v daných
prohledávaných sloupcích se slovo databáze nevyskytuje,
desetinné číslo určuje četnost slova databáze v prohledávaném
sloupci vztaženou na počet slov tohoto sloupce => čím větší číslo, tím
větší procentuální četnost) všech záznamů z tabulky Knihy.
Výpis nebude setřízený
SELECT ID_Knihy, MATCH (Nazev_Knihy, Ukazka) AGAINST ('databáze') as score
FROM Knihy
WHERE MATCH (Nazev_Knihy, Ukazka) AGAINST ('databáze');
Jako předchozí dotaz, ale záznamy setřídí a vypíše jen záznamy, ve kterých se tato hledaná slova vyskytovala.
K databázi může přistupovat více lidí současně. Pokud je nějaký dotaz na databázi závislý na aktuálním stavu dat, který by jiný dotaz mohl změnit, je nutné uzamknout příslušný záznam.
Taková situace by mohla nastat, pokud bychom v databázi evidovali množství zásob na skladu a podle toho určovali dodací lhůty. Jeden proces by zjistil množství zásob na skladu, vypočítal by dodací lhůtu a pak by odečetl objednané zboží od zboží na skladu. Pokud by ale do databáze přistoupil druhý proces těsně po prvním (ještě před tím, než první odečte objednané zboží od zboží na skladu), získal by špatná data.
LOCK TABLES tabulka1 [AS alias] {READ | [LOW_PRIORITY] WRITE}
[, tabulka2 {READ | [LOW_PRIORITY] WRITE} ...]
Tabulku odemknete příkazem:
UNLOCK TABLES
Tabulky lze zamykat pro čtení (READ) - znamená to, že
ostatní procesy budou moci z tabulky pouze číst (a nebudou do ní moci
zapisovat).
Dále lze tabulky zamykat pro zápis (WRITE) - pak bude moci
tabulku používat pouze proces, který ji uzamkl - získá k ní výhradní
přístup.
Pokud dostane databáze více příkazů LOCK TABLES, řadí se tyto příkazy do fronty. Požadavky na výhradní přístup mají přednost před požadavky na otevření tabulek jen pro čtení.
Pokud zadáte příkaz LOW_PRIORITY WRITE, bude MySQL dávat
přednost požadavkům na čtení před požadavky na výhradní přístup. Tento
příkaz zadejte, pokud je ve vaší databázi důležitější otevření tabulky pro
čtení než otevření tabulky ve výhradním režimu.
Zadáte-li příkaz SELECT HIGH_PRIORITY, můžete z tabulek
číst, i když je na tuto tabulku vystaven požadavek na výhradní
přístup.
LOCK TABLESINSERT) může dojít ke zvýšení výkonu.LOCK TABLES se používá při zálohování databáze.
Pokud by někdo zapisoval do databáze v průběhu zálohování, mohla by se
porušit konzistence dat.Dnes jste nabyli další velmi významné dovednosti potřebné ke zvládnutí
MySQL. Klíče jsou nezbytné při tvorbě relací, mohou významně zvýšit
vykonání klauzule WHERE. V neposlední řadě můžete použít
fulltextové klíče k fulltextovému hledání.
Zamykání záznamů se používá k odstranění problémů vzniklých v důsledku mnohonásobného přístupu.
V příštím dílu se seznámíte s nejdůležitějšími funkcemi v MySQL.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej: