Přeskočit na obsah

MySQL: Porovnání verzí

Z Wikipedie, otevřené encyklopedie
Smazaný obsah Přidaný obsah
JackalND (diskuse | příspěvky)
→‎top: Do prvního odstavce přidáno, že se jedná o relační systém (IMO velmi důležitá informace; zdroj: infobox).
typografie, stylistika, aktualizace verze a odkazů
Řádek 1: Řádek 1:
{{Infobox - software
{{Infobox - software
| jméno = MySQL
| jméno = MySQL
| logo =
| logo =
| velikost loga =
| velikost loga =
| obrázek = Mysql-screenshot.PNG
| obrázek = Mysql-screenshot.PNG
| velikost obrázku =
| velikost obrázku =
| alt =
| alt =
| popisek = [[Screenshot]] příkazové řádky MySQL
| popisek = [[Snímek obrazovky|Snímek]] příkazové řádky MySQL
| vývojář = [[Oracle Corporation]]
| vývojář = [[Oracle Corporation]]
| aktuální verze = 5.6.21<ref>{{cite web |url=http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-21.html |title=Změny v MySQL 5.6.21|date=23. září |work=MySQL 5.6 Reference Manual |publisher=[[Oracle Corporation|Oracle]] |accessdate=23 September 2014}}</ref>
| aktuální verze = 5.7.16<ref>{{Citace elektronické monografie | url = http://dev.mysql.com/doc/relnotes/mysql/5.7/en | titul = MySQL 5.7 Release Notes | datum = 2016-10-17 | vydavatel = mysql.com | datum přístupu = 2016-10-17 | jazyk = anglicky}}</ref><br />
| datum aktuální verze = [[23. září]] [[2014]]
| datum aktuální verze = [[12. říjen]] [[2016]]
| připravovaná verze = 5.7.6
| připravovaná verze =
| datum připravované verze = zatím neznámé
| datum připravované verze = zatím neznámé
| operační systém = [[Microsoft Windows|Windows]], [[Linux]], [[Solaris (operační systém)|Solaris]], [[OS X]], [[FreeBSD]]
| operační systém = [[Microsoft Windows|Windows]], [[Linux|GNU/Linux]], [[Solaris (operační systém)|Solaris]], [[OS X|macOS]], [[FreeBSD]]
| platforma =
| platforma =
| programovací jazyk = [[C (programovací jazyk)|C]], [[C++]]
| programovací jazyk = [[C (programovací jazyk)|C]], [[C++]]
| typ softwaru = [[Relační databáze]]
| typ softwaru = [[Relační databáze]]
| licence = [[GNU General Public License|GPL]] nebo [[Komerční software|komerční]]
| licence = [[GNU General Public License|GPL]] (verze 2) nebo [[Komerční software|komerční]]<ref>{{Citace elektronické monografie | url = http://www.mysql.com/downloads | titul = Downloads | vydavatel = MySQL | datum = | datum_přístupu = 2014-08-03}}</ref>
| lokalizace = anglicky
| lokalizace = anglicky
| web = [http://www.mysql.com/ www.mysql.com]
| web = [http://www.mysql.com/ www.mysql.com]
}}
}}


'''MySQL''' je [[systém řízení báze dat]] uplatňující [[Relační model|relační databázový model]], vytvořený [[Švédsko|švédskou]] firmou [[MySQL AB]], nyní vlastněný společností [[Sun Microsystems]], dceřinou společností [[Oracle Corporation]]. Jeho hlavními autory jsou [[Michael Widenius|Michael „Monty“ Widenius]] a [[David Axmark]]. Je považován za úspěšného průkopníka dvojího licencování – je k dispozici jak pod bezplatnou licencí [[GNU General Public License|GPL]], tak pod komerční placenou licencí.
'''MySQL''' je [[systém řízení báze dat]] uplatňující [[Relační model|relační databázový model]], vytvořený [[Švédsko|švédskou]] firmou [[MySQL AB]], nyní vlastněný společností [[Sun Microsystems]], dceřinou společností [[Oracle Corporation]]. Jeho hlavními autory jsou [[Michael Widenius|Michael „Monty“ Widenius]] a [[David Axmark]]. Je považován za úspěšného průkopníka dvojího licencování – je k&nbsp;dispozici jak pod bezplatnou licencí [[GNU General Public License|GPL]], tak pod komerční placenou licencí.


MySQL je [[multiplatformní software|multiplatformní]] databáze. Komunikace s ní probíhá – jak už název napovídá – pomocí jazyka [[SQL]]. Podobně jako u ostatních SQL databází se jedná o dialekt tohoto jazyka s některými rozšířeními.
MySQL je [[multiplatformní software|multiplatformní]] databáze. Komunikace s&nbsp;ní probíhá – jak už název napovídá – pomocí jazyka [[SQL]]. Podobně jako u&nbsp;ostatních SQL databází se jedná o&nbsp;dialekt tohoto jazyka s&nbsp;některými rozšířeními.


Pro svou snadnou implementovatelnost (lze jej instalovat na [[Linux]], [[Microsoft Windows|MS Windows]], ale i další operační systémy), výkon a především díky tomu, že se jedná o volně šiřitelný software, má vysoký podíl na v současné době používaných databázích. Velmi oblíbená a často nasazovaná je kombinace Linux, [[Apache HTTP Server|Apache]], MySQL a [[PHP]], jako základní software webového serveru („technologie [[LAMP]]“).
Pro svou snadnou implementovatelnost (lze jej instalovat na [[Linux|GNU/Linux]], [[Microsoft Windows|MS Windows]], ale i další operační systémy), výkon a především díky tomu, že se jedná o&nbsp;volně šiřitelný software, má vysoký podíl na v&nbsp;současné době používaných databázích. Velmi oblíbená a často nasazovaná je kombinace GNU/Linux, [[Apache HTTP Server|Apache]], MySQL a [[PHP]], jako základní software webového serveru („technologie [[LAMP]]“).


MySQL bylo od počátku optimalizováno především na rychlost, a to i za cenu některých zjednodušení: má jen jednoduché způsoby zálohování, a až donedávna nepodporovalo [[Pohled (databáze)|pohledy]], [[trigger (databáze)|triggery]], a [[uložená procedura|uložené procedury]]. Tyto vlastnosti jsou doplňovány teprve v posledních letech, kdy začaly nejčastějším uživatelům produktu – programátorům webových stránek – již poněkud scházet.
MySQL bylo od počátku optimalizováno především na rychlost, a to i za cenu některých zjednodušení: má jen jednoduché způsoby zálohování, a až donedávna nepodporovalo [[Pohled (databáze)|pohledy]], [[trigger (databáze)|triggery]], a [[uložená procedura|uložené procedury]]. Tyto vlastnosti jsou doplňovány teprve v&nbsp;posledních letech, kdy začaly nejčastějším uživatelům produktu – programátorům webových stránek – již poněkud scházet.


== Architektura MySQL serveru ==
== Architektura MySQL serveru ==
[[Soubor:Mysql_architekture_schema.png|thumb|Architektura MySQL serveru]]
[[Soubor:Mysql_architekture_schema.png|thumb|Architektura MySQL serveru]]
Architektura MySQL se velmi odlišuje od architektur jiných databázových serverů, má široký záběr a je užitečná pro řešení mnoha různorodých úloh. Vrstva, která je úplně nahoře, obsahuje služby, jež nejsou jedinečné pro MySQL. Obsluhují většinu potřebných nástrojů klient/server, které jsou založeny na síti.
Architektura MySQL se velmi odlišuje od architektur jiných databázových serverů, má široký záběr a je užitečná pro řešení mnoha různorodých úloh. Nejsvrchnější vrstva obsahuje služby, jež nejsou jedinečné pro MySQL. Obsluhují většinu potřebných nástrojů klient/server, které jsou založeny na síti.


Ve druhé vrstvě se nachází valná část mozku MySQL, včetně kódu pro rozbor (parsing), analýzu, optimalizaci a pro všechny zabudované funkce. Na této úrovni se nachází veškerá funkcionalita, která se poskytuje prostřednictvím úložných enginů.
Ve druhé vrstvě se nachází valná část mozku MySQL, včetně kódu pro rozbor (parsing), analýzu, optimalizaci a pro všechny zabudované funkce. Na této úrovni se nachází veškerá funkcionalita, která se poskytuje prostřednictvím úložných enginů.


Třetí vrstva obsahuje úložné enginy. Ty mají na starosti ukládání a získávání všech dat uložených v MySQL. Server komunikuje s úložnými enginy prostřednictvím [[API]] úložných enginů. Toto rozhraní skrývá rozdíly mezi jednotlivými úložnými enginy a činí je na vrstvě dotazů velmi transparentními. [[API]] obsahuje několik desítek nízkoúrovňových funkcí, které provádějí operace jako "zahájit transakci" nebo "získat řádek, který má tento primární klíč". Úložné enginy nedělají rozbor [[SQL]] a nekomunikují mezi sebou - jednoduše pouze odpovídají na požadavky serveru.
Třetí vrstva obsahuje úložné enginy. Ty mají na starosti ukládání a získávání všech dat uložených v&nbsp;MySQL. Server komunikuje s&nbsp;úložnými enginy prostřednictvím [[API]] úložných enginů. Toto rozhraní skrývá rozdíly mezi jednotlivými úložnými enginy a činí je na vrstvě dotazů velmi transparentními. [[API]] obsahuje několik desítek nízkoúrovňových funkcí, které provádějí operace jako „zahájit transakci“ nebo „získat řádek, který má tento primární klíč“. Úložné enginy nedělají rozbor [[SQL]] a nekomunikují mezi sebou jednoduše pouze odpovídají na požadavky serveru.


=== Správa připojení a bezpečnost ===
=== Správa připojení a bezpečnost ===
Každé klientské připojení dostane uvnitř serverového procesu vlastní vlákno (thread). Dotazy tohoto připojení se vykonávají uvnitř tohoto jediného vlákna, které zase sídlí na jednom jádru nebo [[Centrální procesorová jednotka|CPU]]. Protože server udržuje vlákna v [[cache]], nemusejí se vytvářet a likvidovat pro každé nové připojení. [[Autentizace]] je založena na uživatelském jménu, hostiteli, odkud pocházejí a heslu. Dají se také používat certifikáty [[X509]] přes připojení [[SSL]]. Jakmile se klient připojí, server pro každý dotaz vydaný klientem ověřuje, zdali má patřičná oprávnění pro akci, kterou chce vykonat.
Každé klientské připojení dostane uvnitř serverového procesu vlastní vlákno (thread). Dotazy tohoto připojení se vykonávají uvnitř tohoto jediného vlákna, které zase sídlí na jednom jádru nebo [[Centrální procesorová jednotka|CPU]]. Protože server udržuje vlákna v&nbsp;[[cache]], nemusejí se vytvářet a likvidovat pro každé nové připojení. [[Autentizace]] je založena na uživatelském jménu, hostiteli, odkud pocházejí a heslu. Dají se také používat certifikáty [[X509]] přes připojení [[SSL]]. Jakmile se klient připojí, server pro každý dotaz vydaný klientem ověřuje, zdali má patřičná oprávnění pro akci, kterou chce vykonat.


=== Optimalizace a vykonávání ===
=== Optimalizace a vykonávání ===
MySQL provádí rozbor dotazů proto, aby vytvořil interní stromovou strukturu (parse tree), pak aplikuje všelijaké optimalizace. Může dotaz přepsat, určit pořadí, v němž bude číst tabulky, zvolit, které [[index]]y použije atd. Prostřednictvím speciálních klíčových slov může programátor optimalizátoru předat tzv. pokyny (hints), jimiž se dá ovlivnit rozhodovací proces. Optimalizátor se ve skutečnosti nestará o to, který úložný engine používá konkrétní tabulka. Úložný engine ovšem ovlivňuje, jak server optimalizuje dotaz. Optimalizátor od úložného enginu zjišťuje, zdali má jistou výbavu, ptá se na náklady jistých operací a dotazuje se na statistiky o datech tabulky.
MySQL provádí rozbor dotazů proto, aby vytvořil interní stromovou strukturu (parse tree), pak aplikuje všelijaké optimalizace. Může dotaz přepsat, určit pořadí, v&nbsp;němž bude číst tabulky, zvolit, které [[index]]y použije atd. Prostřednictvím speciálních klíčových slov může programátor optimalizátoru předat tzv. pokyny (hints), jimiž se dá ovlivnit rozhodovací proces. Optimalizátor se ve skutečnosti nestará o&nbsp;to, který úložný engine používá konkrétní tabulka. Úložný engine ovšem ovlivňuje, jak server optimalizuje dotaz. Optimalizátor od úložného enginu zjišťuje, zdali má jistou výbavu, ptá se na náklady jistých operací a dotazuje se na statistiky o&nbsp;datech tabulky.


Ovšem ještě dřív než server začne s rozborem dotazu, obrátí se na [[cache dotazů]] (query cache), kam může ukládat pouze příkazy [[SELECT]] společně s jejich výslednými sadami. Jestliže někdo vydá dotaz, který je identický s nějakým dotazem, který je už k dispozici v cache, server nemusí dělat vůbec žádný rozbor, nemusí nic optimalizovat a dokonce nemusí dotaz ani vykonat - jednoduše pouze předá zpět uloženou výslednou sadu.
Ovšem ještě dřív než server začne s&nbsp;rozborem dotazu, obrátí se na [[cache dotazů]] (query cache), kam může ukládat pouze příkazy [[SELECT]] společně s&nbsp;jejich výslednými sadami. Jestliže někdo vydá dotaz, který je identický s&nbsp;nějakým dotazem, který je už k&nbsp;dispozici v&nbsp;cache, server nemusí dělat vůbec žádný rozbor, nemusí nic optimalizovat a dokonce nemusí dotaz ani vykonat jednoduše pouze předá zpět uloženou výslednou sadu.


=== Úložné databázové stroje (úložiště dat) ===
=== Úložné databázové stroje (úložiště dat) ===
Řádek 49: Řádek 49:
* [[ARCHIVE]] – stroj uzpůsobený pro ukládání velkého množství neindexovaných dat.
* [[ARCHIVE]] – stroj uzpůsobený pro ukládání velkého množství neindexovaných dat.
* [[BLACKHOLE]] – stroj, který data přijímá, ale neukládá je (zahazuje je).
* [[BLACKHOLE]] – stroj, který data přijímá, ale neukládá je (zahazuje je).
* [[CSV (MySQL)|CSV]] – ukládá data v textovém formátu [[CSV]].
* [[CSV (MySQL)|CSV]] – ukládá data v&nbsp;textovém formátu [[CSV]].
* [[EXAMPLE]] – nefunkční stroj, který slouží jako ilustrační pro potřeby zdrojových kódů databáze MySQL a využijí ho tedy jen její vývojáři.
* [[EXAMPLE]] – nefunkční stroj, který slouží jako ilustrační pro potřeby zdrojových kódů databáze MySQL a využijí ho tedy jen její vývojáři.
* [[FEDERATED]]
* [[FEDERATED]]
* [[InnoDB]]
* [[InnoDB]]
* [[MEMORY]] nebo [[HEAP]] – vysoce výkonné úložiště, který data uchovává pouze v operační paměti, při restartu serveru jsou data ztracena.
* [[MEMORY]] nebo [[HEAP]] – vysoce výkonné úložiště, který data uchovává pouze v&nbsp;operační paměti, při restartu serveru jsou data ztracena.
* [[MERGE (MySQL)|MERGE]] - sloučení dat z několika MyISAM tabulek o stejné struktuře, starší alternativa k [[partition (databáze)|partition]].
* [[MERGE (MySQL)|MERGE]] sloučení dat z&nbsp;několika MyISAM tabulek o&nbsp;stejné struktuře, starší alternativa k&nbsp;[[partition (databáze)|partition]].
* [[MyISAM]]
* [[MyISAM]]
Před koupí MySQL Oraclem byl vyvíjen ještě stroj [[Falcon (MySQL)|Falcon]], ale Oracle jeho vývoj ukončil.
Před koupí MySQL Oraclem byl vyvíjen ještě stroj [[Falcon (MySQL)|Falcon]], ale Oracle jeho vývoj ukončil.


Úložiště fungují jako [[modularita|moduly]], které lze k distribuci tohoto databázového systému doinstalovat; jejich aktuální seznam lze zjistit příkazem <tt>[[SHOW]] ENGINES</tt> nebo <tt>SELECT * FROM information_schema.ENGINES</tt>. Každé úložiště ukládá data tabulky a její případné klíče jinak, definici tabulky ovšem zpracovává samotný server.
Úložiště fungují jako [[modularita|moduly]], které lze k&nbsp;distribuci tohoto databázového systému doinstalovat; jejich aktuální seznam lze zjistit příkazem <tt>[[SHOW]] ENGINES</tt> nebo <tt>SELECT * FROM information_schema.ENGINES</tt>. Každé úložiště ukládá data tabulky a její případné klíče jinak, definici tabulky ovšem zpracovává samotný server.


=== Ukládání dat ===
=== Ukládání dat ===
MySQL ukládá každou databázi (také se jim říká schéma) do podadresáře svého datového adresáře na odkladovém souborovém systému (dá se změnit klauzulí <tt>DATA DIRECTORY</tt> a <tt>INDEX DIRECTORY</tt>). Každá vytvořená tabulka (s výjimkou enginů BLACKHOLE, MEMORY, EXAMPLE) je MySQL uložena do souborů s těmito příponami:
MySQL ukládá každou databázi (také se jim říká schéma) do podadresáře svého datového adresáře na odkladovém souborovém systému (dá se změnit klauzulí <tt>DATA DIRECTORY</tt> a <tt>INDEX DIRECTORY</tt>). Každá vytvořená tabulka (s&nbsp;výjimkou enginů BLACKHOLE, MEMORY, EXAMPLE) je MySQL uložena do souborů s&nbsp;těmito příponami:
* <tt>.frm</tt> – definice tabulky
* <tt>.frm</tt> – definice tabulky
* <tt>.MYD</tt> – data tabulky
* <tt>.MYD</tt> – data tabulky
Řádek 67: Řádek 67:


==== Závislost na diskovém systému ====
==== Závislost na diskovém systému ====
Na rozdíl od databázových řešení, držící databázi v jednom souboru (MS Access, [[SQLite]]) v MySQL název adresáře odpovídá názvu databáze a název souboru (bez přípony) odpovídá názvu tabulky. Jelikož MySQL používá při ukládání definic souborový systém, otázka rozlišování velikosti písmen je závislá na platformě. Na instalaci MySQL na [[Microsoft Windows|Windows]] se velikost písmen v názvech tabulek a databází nerozlišuje, na [[unix]]ových systémech se velikost písmen rozlišuje. Databáze i tabulky mohou být pojmenovány téměř libovolně, mohou sestávat jen z číslic, obsahovat mezery, speciální znaky i znaky [[Unicode]] (kromě znaků s kódem 0 a nad 65535). V MySQL se pak takové jméno uvádí ve zpětných jednoduchých uvozovkách (`) – to platí i v případě, je-li název tabulky/databáze shodný s nějakým z klíčových slov SQL. Identifikátor může dokonce obsahovat i zpětnou uvozovku, v tom případě je tento znak zdvojen. V souborovém systému je pak každý takový znak (tj. každý kromě A-Z, a-z, 0-9 a _) zakódován do sekvence <tt>@</tt> + [[ASCII]] kódu daného znaku (dle UTF-16, uvedeného hexadecimálně jako 4 číslice, doplněném nulami, např. mezera jako <tt>@0020</tt>). MySQL pak interně dělá příslušné konverze při každém přístupu k těmto adresářům a souborům. To, které znaky takto budou zakódovány, je závislé na souborovém resp. operačním systému, stejně jako případné limity v maximální délce názvu souboru či adresáře (podle [http://dev.mysql.com/doc/refman/5.0/en/identifiers.html dokumentace] 64, ale v případě, že každý bude zakódován, to dělá 320 znaků oproti 255 znakům např. v [[NTFS]]), maximálním počtu tabulek v databázi nebo databází v systému a výše zmíněné (ne)rozlišování velikosti písmen. Z tohoto důvodu se nedoporučuje vkládat do názvů databází a tabulek „nekonvenční“ znaky, používat znaky s diakritikou a na Linux/Unix se silně nedoporučuje používat databáze/tabulky nazvané stejně, rozlišené jen velikostí písmen.
Na rozdíl od databázových řešení, držící databázi v&nbsp;jednom souboru (MS Access, [[SQLite]]) v&nbsp;MySQL název adresáře odpovídá názvu databáze a název souboru (bez přípony) odpovídá názvu tabulky. Jelikož MySQL používá při ukládání definic souborový systém, otázka rozlišování velikosti písmen je závislá na platformě. Na instalaci MySQL na [[Microsoft Windows|Windows]] se velikost písmen v&nbsp;názvech tabulek a databází nerozlišuje, na [[UN*X|unix]]ových systémech se velikost písmen rozlišuje. Databáze i tabulky mohou být pojmenovány téměř libovolně, mohou sestávat jen z&nbsp;číslic, obsahovat mezery, speciální znaky i znaky [[Unicode]] (kromě znaků s&nbsp;kódem 0 a nad 65 535). V&nbsp;MySQL se pak takové jméno uvádí ve zpětných jednoduchých uvozovkách (`) – to platí i v&nbsp;případě, je-li název tabulky/databáze shodný s&nbsp;nějakým z&nbsp;klíčových slov SQL. Identifikátor může dokonce obsahovat i zpětnou uvozovku, v&nbsp;tom případě je tento znak zdvojen. V&nbsp;souborovém systému je pak každý takový znak (tj. každý kromě A–Z, a–z, 0–9 a _) zakódován do sekvence <tt>@</tt> + [[ASCII]] kódu daného znaku (dle UTF-16, uvedeného hexadecimálně jako 4 číslice, doplněném nulami, např. mezera jako <tt>@0020</tt>). MySQL pak interně dělá příslušné konverze při každém přístupu k&nbsp;těmto adresářům a souborům. To, které znaky takto budou zakódovány, je závislé na souborovém resp. operačním systému, stejně jako případné limity v&nbsp;maximální délce názvu souboru či adresáře (podle [http://dev.mysql.com/doc/refman/5.0/en/identifiers.html dokumentace] 64, ale v&nbsp;případě, že každý bude zakódován, to dělá 320 znaků oproti 255 znakům např. v&nbsp;[[NTFS]]), maximálním počtu tabulek v&nbsp;databázi nebo databází v&nbsp;systému a výše zmíněné (ne)rozlišování velikosti písmen. Z&nbsp;tohoto důvodu se nedoporučuje vkládat do názvů databází a tabulek „nekonvenční“ znaky, používat znaky s&nbsp;diakritikou a na [[UN*X|unixových]] systémech (včetně Linuxu) se silně nedoporučuje používat databáze/tabulky nazvané stejně, rozlišené jen velikostí písmen.


Další prvek, který koresponduje s vytvářením souborů na disku, je tzv. partitioning, to jest vnitřní rozdělení tabulky na úrovni souborového systému. Takové tabulky mohou být rozděleny podle partitions (doslova přepážky), jež mohou být definovány přes sloupec, klíč jeho hash atd. Podle typu si lze definovat, na kolik dílů se má tabulka rozdělit, a tolik potom bude daných souborů (pro data i pro klíče).
Další prvek, který koresponduje s&nbsp;vytvářením souborů na disku, je tzv. partitioning, to jest vnitřní rozdělení tabulky na úrovni souborového systému. Takové tabulky mohou být rozděleny podle partitions (doslova přepážky), jež mohou být definovány přes sloupec, klíč jeho hash atd. Podle typu si lze definovat, na kolik dílů se má tabulka rozdělit, a tolik potom bude daných souborů (pro data i pro klíče).


== Přehled podporovaných vlastností ==
== Přehled podporovaných vlastností ==
;verze 3.23
;verze 3.23
* [[cizí klíč]]e (podporovány v tabulkách typu [[InnoDB]])
* [[cizí klíč]]e (podporovány v&nbsp;tabulkách typu [[InnoDB]])
* [[Databázová transakce|transakce]] (podporovány v tabulkách typu [[InnoDB]])
* [[Databázová transakce|transakce]] (podporovány v&nbsp;tabulkách typu [[InnoDB]])
* Příkazová replikace
* Příkazová replikace
* [[fulltext]]ové vyhledávání (od verze 3.23.23)<ref>http://www.fi.muni.cz/~kripac/PV136/zurek/prezentace.html</ref>
* [[fulltext]]ové vyhledávání (od verze 3.23.23)<ref>http://www.fi.muni.cz/~kripac/PV136/zurek/prezentace.html</ref>
Řádek 81: Řádek 81:
;verze 4.1
;verze 4.1
* podpora různých znakových sad a porovnávání na úrovni databáze, tabulky i sloupce
* podpora různých znakových sad a porovnávání na úrovni databáze, tabulky i sloupce
* podpora časových pásem v datech
* podpora časových pásem v&nbsp;datech
* [[poddotaz]]y
* [[poddotaz]]y
* [[R-strom]]y (v tabulkách typu [[MyISAM]])
* [[R-strom]]y (v&nbsp;tabulkách typu [[MyISAM]])
* podpora „audio“ funkce <code>SOUNDS_LIKE</code>
* podpora „audio“ funkce <tt>SOUNDS_LIKE<tt/>
;verze 5.0
;verze 5.0
* [[uložená procedura|uložené procedury]]
* [[uložená procedura|uložené procedury]]
Řádek 90: Řádek 90:
* [[Pohled (databáze)|pohledy]]
* [[Pohled (databáze)|pohledy]]
* práce s [[metadata|metadaty]]
* práce s [[metadata|metadaty]]
* distribuované XA transakce (v tabulkách typu InnoDB)
* distribuované XA transakce (v&nbsp;tabulkách typu InnoDB)
* kurzory
* kurzory
* INFORMATION.SCHEMA
* INFORMATION.SCHEMA
Řádek 113: Řádek 113:


== Kódování a znakové sady ==
== Kódování a znakové sady ==
Od verze 4.1 MySQL řeší ukládání řetězců s podporou [[Unicode]] pomocí nastavení znakové sady (<tt>CHARACTER SET</tt>) <tt>[[Databázový sloupec#COLLATION|COLLATION]]</tt>. To představuje souhrn způsobů, jak k takto uloženému textu přistupovat – porovnávání (s ohledem na případné národnostní zvyklosti), řazení, citlivost velkých malých písmen, ligatur, transkripcí speciálních znaků apod. Znaková sada a collation mohou být nastaveny individuálně pro daný (textový) sloupec, mimo je možnost nastavit defaultní sadu a collation pro tabulku (tu zdědí vytvářené sloupce, u kterých nebyla explicitně vybrána), i celá databáze (tu zase kaskádově zdědí v ní vytvářené tabulky, pokud pro ně není výslovně nastavena). I jednotlivé collations jsou modulární (existují v podobě textových souborů). Jejich aktuální výčet lze zjistit příkazem <tt>[[SHOW]] COLLATION</tt>.
Od verze 4.1 MySQL řeší ukládání řetězců s&nbsp;podporou [[Unicode]] pomocí nastavení znakové sady (<tt>CHARACTER SET</tt>) <tt>[[Databázový sloupec#COLLATION|COLLATION]]</tt>. To představuje souhrn způsobů, jak k&nbsp;takto uloženému textu přistupovat – porovnávání (s&nbsp;ohledem na případné národnostní zvyklosti), řazení, citlivost velkých malých písmen, ligatur, transkripcí speciálních znaků apod. Znaková sada a collation mohou být nastaveny individuálně pro daný (textový) sloupec, mimo je možnost nastavit defaultní sadu a collation pro tabulku (tu zdědí vytvářené sloupce, u&nbsp;kterých nebyla explicitně vybrána), i celá databáze (tu zase kaskádově zdědí v&nbsp;ní vytvářené tabulky, pokud pro ně není výslovně nastavena). I&nbsp;jednotlivé collations jsou modulární (existují v&nbsp;podobě textových souborů). Jejich aktuální výčet lze zjistit příkazem <tt>[[SHOW]] COLLATION</tt>.


== Související články ==
== Související články ==
* [[LAMP]]
* [[LAMP]]
;nástroje pro správu objektů v MySQL
;nástroje pro správu objektů v&nbsp;MySQL
* [[phpMyAdmin]]
* [[phpMyAdmin]]
* [[Adminer]]
* [[Adminer]]
Řádek 123: Řádek 123:


== Externí odkazy ==
== Externí odkazy ==
* {{Commonscat|MySQL}}
* {{Commonscat | MySQL}}
* {{Wikiverzita|kurs=MySQL/Kódování}}
* {{Wikiverzita | kurs = MySQL/Kódování}}
* {{Wikiverzita|kurs=MySQL}}
* {{Wikiverzita | kurs = MySQL}}


* [http://cs.wikiversity.org/wiki/MySQL MySQL na Wikiverzitě]
* {{en}} [http://www.mysql.com/ www.mysql.com] – Oficiální stránky
* [http://cs.wikiversity.org/wiki/MySQL MySQL na Wikiverzitě beta]
* Seriály na ABC Linuxu:
* Seriály na ABC Linuxu:
** [http://www.abclinuxu.cz/clanky/navody/tvorba-databazi-v-mysql-i Tvorba databází v MySQL, 6 dilů]
** [http://www.abclinuxu.cz/clanky/navody/tvorba-databazi-v-mysql-i Tvorba databází v&nbsp;MySQL, 6 dilů]
** [http://www.abclinuxu.cz/clanky/navody/sprava-databazi-v-mysql-i Správa databází v MySQL, 3 díly]
** [http://www.abclinuxu.cz/clanky/navody/sprava-databazi-v-mysql-i Správa databází v&nbsp;MySQL, 3 díly]
* [http://www.linuxsoft.cz/article_list.php?id_kategory=232 Český seriál o MySQL na serveru Linuxsoft]
* [http://www.linuxsoft.cz/article_list.php?id_kategory=232 českojazyčný seriál &nbsp;MySQL na serveru Linuxsoft]
* [http://www.junext.net/mysql Český MySQL manuál]
* [http://www.junext.net/mysql českojazyčný MySQL manuál]
* {{en}} [http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ MySQL tuning] - jak vyladit nastavení MySQL serveru
* {{en}} [http://www.percona.com/blog/2006/09/29/what-to-tune-in-mysql-server-after-installation MySQL tuning] jak vyladit nastavení MySQL serveru


== Reference ==
== Reference ==

Verze z 18. 10. 2016, 01:09

MySQL
Snímek příkazové řádky MySQL
Snímek příkazové řádky MySQL
VývojářOracle Corporation
První vydání23. května 1995
Aktuální verze5.7.16[1]
(12. říjen 2016)
Připravovaná verze(zatím neznámé)
Operační systémWindows, GNU/Linux, Solaris, macOS, FreeBSD
Vyvíjeno vC, C++
Typ softwaruRelační databáze
LicenceGPL (verze 2) nebo komerční[2]
Lokalizaceanglicky
Webwww.mysql.com
Některá data mohou pocházet z datové položky.

MySQL je systém řízení báze dat uplatňující relační databázový model, vytvořený švédskou firmou MySQL AB, nyní vlastněný společností Sun Microsystems, dceřinou společností Oracle Corporation. Jeho hlavními autory jsou Michael „Monty“ Widenius a David Axmark. Je považován za úspěšného průkopníka dvojího licencování – je k dispozici jak pod bezplatnou licencí GPL, tak pod komerční placenou licencí.

MySQL je multiplatformní databáze. Komunikace s ní probíhá – jak už název napovídá – pomocí jazyka SQL. Podobně jako u ostatních SQL databází se jedná o dialekt tohoto jazyka s některými rozšířeními.

Pro svou snadnou implementovatelnost (lze jej instalovat na GNU/Linux, MS Windows, ale i další operační systémy), výkon a především díky tomu, že se jedná o volně šiřitelný software, má vysoký podíl na v současné době používaných databázích. Velmi oblíbená a často nasazovaná je kombinace GNU/Linux, Apache, MySQL a PHP, jako základní software webového serveru („technologie LAMP“).

MySQL bylo od počátku optimalizováno především na rychlost, a to i za cenu některých zjednodušení: má jen jednoduché způsoby zálohování, a až donedávna nepodporovalo pohledy, triggery, a uložené procedury. Tyto vlastnosti jsou doplňovány teprve v posledních letech, kdy začaly nejčastějším uživatelům produktu – programátorům webových stránek – již poněkud scházet.

Architektura MySQL serveru

Architektura MySQL serveru

Architektura MySQL se velmi odlišuje od architektur jiných databázových serverů, má široký záběr a je užitečná pro řešení mnoha různorodých úloh. Nejsvrchnější vrstva obsahuje služby, jež nejsou jedinečné pro MySQL. Obsluhují většinu potřebných nástrojů klient/server, které jsou založeny na síti.

Ve druhé vrstvě se nachází valná část mozku MySQL, včetně kódu pro rozbor (parsing), analýzu, optimalizaci a pro všechny zabudované funkce. Na této úrovni se nachází veškerá funkcionalita, která se poskytuje prostřednictvím úložných enginů.

Třetí vrstva obsahuje úložné enginy. Ty mají na starosti ukládání a získávání všech dat uložených v MySQL. Server komunikuje s úložnými enginy prostřednictvím API úložných enginů. Toto rozhraní skrývá rozdíly mezi jednotlivými úložnými enginy a činí je na vrstvě dotazů velmi transparentními. API obsahuje několik desítek nízkoúrovňových funkcí, které provádějí operace jako „zahájit transakci“ nebo „získat řádek, který má tento primární klíč“. Úložné enginy nedělají rozbor SQL a nekomunikují mezi sebou – jednoduše pouze odpovídají na požadavky serveru.

Správa připojení a bezpečnost

Každé klientské připojení dostane uvnitř serverového procesu vlastní vlákno (thread). Dotazy tohoto připojení se vykonávají uvnitř tohoto jediného vlákna, které zase sídlí na jednom jádru nebo CPU. Protože server udržuje vlákna v cache, nemusejí se vytvářet a likvidovat pro každé nové připojení. Autentizace je založena na uživatelském jménu, hostiteli, odkud pocházejí a heslu. Dají se také používat certifikáty X509 přes připojení SSL. Jakmile se klient připojí, server pro každý dotaz vydaný klientem ověřuje, zdali má patřičná oprávnění pro akci, kterou chce vykonat.

Optimalizace a vykonávání

MySQL provádí rozbor dotazů proto, aby vytvořil interní stromovou strukturu (parse tree), pak aplikuje všelijaké optimalizace. Může dotaz přepsat, určit pořadí, v němž bude číst tabulky, zvolit, které indexy použije atd. Prostřednictvím speciálních klíčových slov může programátor optimalizátoru předat tzv. pokyny (hints), jimiž se dá ovlivnit rozhodovací proces. Optimalizátor se ve skutečnosti nestará o to, který úložný engine používá konkrétní tabulka. Úložný engine ovšem ovlivňuje, jak server optimalizuje dotaz. Optimalizátor od úložného enginu zjišťuje, zdali má jistou výbavu, ptá se na náklady jistých operací a dotazuje se na statistiky o datech tabulky.

Ovšem ještě dřív než server začne s rozborem dotazu, obrátí se na cache dotazů (query cache), kam může ukládat pouze příkazy SELECT společně s jejich výslednými sadami. Jestliže někdo vydá dotaz, který je identický s nějakým dotazem, který je už k dispozici v cache, server nemusí dělat vůbec žádný rozbor, nemusí nic optimalizovat a dokonce nemusí dotaz ani vykonat – jednoduše pouze předá zpět uloženou výslednou sadu.

Úložné databázové stroje (úložiště dat)

MySQL nabízí několik typů databázových úložišť (storage engine), které se liší svými možnostmi, použitím a způsobem ukládání dat do souborů:

  • ARCHIVE – stroj uzpůsobený pro ukládání velkého množství neindexovaných dat.
  • BLACKHOLE – stroj, který data přijímá, ale neukládá je (zahazuje je).
  • CSV – ukládá data v textovém formátu CSV.
  • EXAMPLE – nefunkční stroj, který slouží jako ilustrační pro potřeby zdrojových kódů databáze MySQL a využijí ho tedy jen její vývojáři.
  • FEDERATED
  • InnoDB
  • MEMORY nebo HEAP – vysoce výkonné úložiště, který data uchovává pouze v operační paměti, při restartu serveru jsou data ztracena.
  • MERGE – sloučení dat z několika MyISAM tabulek o stejné struktuře, starší alternativa k partition.
  • MyISAM

Před koupí MySQL Oraclem byl vyvíjen ještě stroj Falcon, ale Oracle jeho vývoj ukončil.

Úložiště fungují jako moduly, které lze k distribuci tohoto databázového systému doinstalovat; jejich aktuální seznam lze zjistit příkazem SHOW ENGINES nebo SELECT * FROM information_schema.ENGINES. Každé úložiště ukládá data tabulky a její případné klíče jinak, definici tabulky ovšem zpracovává samotný server.

Ukládání dat

MySQL ukládá každou databázi (také se jim říká schéma) do podadresáře svého datového adresáře na odkladovém souborovém systému (dá se změnit klauzulí DATA DIRECTORY a INDEX DIRECTORY). Každá vytvořená tabulka (s výjimkou enginů BLACKHOLE, MEMORY, EXAMPLE) je MySQL uložena do souborů s těmito příponami:

  • .frm – definice tabulky
  • .MYD – data tabulky
  • .MYI – klíče tabulky

Závislost na diskovém systému

Na rozdíl od databázových řešení, držící databázi v jednom souboru (MS Access, SQLite) v MySQL název adresáře odpovídá názvu databáze a název souboru (bez přípony) odpovídá názvu tabulky. Jelikož MySQL používá při ukládání definic souborový systém, otázka rozlišování velikosti písmen je závislá na platformě. Na instalaci MySQL na Windows se velikost písmen v názvech tabulek a databází nerozlišuje, na unixových systémech se velikost písmen rozlišuje. Databáze i tabulky mohou být pojmenovány téměř libovolně, mohou sestávat jen z číslic, obsahovat mezery, speciální znaky i znaky Unicode (kromě znaků s kódem 0 a nad 65 535). V MySQL se pak takové jméno uvádí ve zpětných jednoduchých uvozovkách (`) – to platí i v případě, je-li název tabulky/databáze shodný s nějakým z klíčových slov SQL. Identifikátor může dokonce obsahovat i zpětnou uvozovku, v tom případě je tento znak zdvojen. V souborovém systému je pak každý takový znak (tj. každý kromě A–Z, a–z, 0–9 a _) zakódován do sekvence @ + ASCII kódu daného znaku (dle UTF-16, uvedeného hexadecimálně jako 4 číslice, doplněném nulami, např. mezera jako @0020). MySQL pak interně dělá příslušné konverze při každém přístupu k těmto adresářům a souborům. To, které znaky takto budou zakódovány, je závislé na souborovém resp. operačním systému, stejně jako případné limity v maximální délce názvu souboru či adresáře (podle dokumentace 64, ale v případě, že každý bude zakódován, to dělá 320 znaků oproti 255 znakům např. v NTFS), maximálním počtu tabulek v databázi nebo databází v systému a výše zmíněné (ne)rozlišování velikosti písmen. Z tohoto důvodu se nedoporučuje vkládat do názvů databází a tabulek „nekonvenční“ znaky, používat znaky s diakritikou a na unixových systémech (včetně Linuxu) se silně nedoporučuje používat databáze/tabulky nazvané stejně, rozlišené jen velikostí písmen.

Další prvek, který koresponduje s vytvářením souborů na disku, je tzv. partitioning, to jest vnitřní rozdělení tabulky na úrovni souborového systému. Takové tabulky mohou být rozděleny podle partitions (doslova přepážky), jež mohou být definovány přes sloupec, klíč jeho hash atd. Podle typu si lze definovat, na kolik dílů se má tabulka rozdělit, a tolik potom bude daných souborů (pro data i pro klíče).

Přehled podporovaných vlastností

verze 3.23
verze 4.0
  • sjednocování dotazů pomocí UNION
verze 4.1
  • podpora různých znakových sad a porovnávání na úrovni databáze, tabulky i sloupce
  • podpora časových pásem v datech
  • poddotazy
  • R-stromy (v tabulkách typu MyISAM)
  • podpora „audio“ funkce SOUNDS_LIKE
verze 5.0
verze 5.1
  • partitioning
  • časování událostí (Event Scheduler)
  • úložiště IBMDB2I (tabulky typu IBM DB2, podporující transakce)
  • rozšiřitelné API
  • replikace na úrovni řádků
  • logování na straně serveru
plánováno ve verzi 6
  • cizí klíče (i pro jiné tabulky než InnoDB)
  • použití cizích i fulltextových klíčů současně

Kódování a znakové sady

Od verze 4.1 MySQL řeší ukládání řetězců s podporou Unicode pomocí nastavení znakové sady (CHARACTER SET) COLLATION. To představuje souhrn způsobů, jak k takto uloženému textu přistupovat – porovnávání (s ohledem na případné národnostní zvyklosti), řazení, citlivost velkých malých písmen, ligatur, transkripcí speciálních znaků apod. Znaková sada a collation mohou být nastaveny individuálně pro daný (textový) sloupec, mimo je možnost nastavit defaultní sadu a collation pro tabulku (tu zdědí vytvářené sloupce, u kterých nebyla explicitně vybrána), i celá databáze (tu zase kaskádově zdědí v ní vytvářené tabulky, pokud pro ně není výslovně nastavena). I jednotlivé collations jsou modulární (existují v podobě textových souborů). Jejich aktuální výčet lze zjistit příkazem SHOW COLLATION.

Související články

nástroje pro správu objektů v MySQL

Externí odkazy

Reference

  1. MySQL 5.7 Release Notes [online]. mysql.com, 2016-10-17 [cit. 2016-10-17]. Dostupné online. (anglicky) 
  2. Downloads [online]. MySQL [cit. 2014-08-03]. Dostupné online. 
  3. http://www.fi.muni.cz/~kripac/PV136/zurek/prezentace.html