Adminer 2.0.0
Školení, která pořádám
Nová verze nástroje pro správu MySQL databáze Adminer má dvě zásadní novinky, což mě vedlo ke zvýšení hlavního čísla verze. Těmi novinkami jsou nástroj pro pohodlnou editaci dat Adminer Editor a možnost upravit funkčnost nástroje vlastním rozšířením. Dalších novinek je také poměrně dost.
Vytváření cizích klíčů
Vytváření cizích klíčů, což je poměrně běžná operace, se dosud dělalo poměrně krkolomně. Po vytvoření tabulky bylo potřeba ručně vytvořit všechny cizí klíče, kde u každého klíče bylo potřeba vybrat zdrojový sloupec a cílovou tabulku (a také cílový sloupec, ale to je obvykle hned ten první). Tento způsob je univerzální a dá se použít třeba i pro vytvoření vícesloupcových cizích klíčů směřujících na neprimární klíč tabulky, to ale obvykle není potřeba.
V nové verzi jsem proto podstatně zjednodušil vytváření jednosloupcového cizího klíče směřujícího na primární klíč. Ten lze vytvořit hned při vytvoření tabulky nebo úpravě její struktury. Tabulka, na jejíž primární klíč bude sloupec směřovat, se vybírá u datového typu a skutečný typ sloupce se odvodí z typu cizího sloupce.
Možná to je na tomto místě trochu schované, ale vylepšuje to algoritmus automatické detekce cizího klíče. Ten funguje tak, že pokud název sloupce odpovídá názvu tabulky nebo jejího primárního klíče, tak se tabulka automaticky vybere. Povoleno je několik způsobů zápisu, takže pokud se tabulka jmenuje interprets
a primární klíč id
, tak se spojí např. název InterpretsID
, id_interprets
nebo interpret
(dovoleno je pravidelné množné číslo angličtiny). Samotný název sloupce se spojí jen tehdy, pokud je mezi všemi primárními klíči unikátní.
Pro zlepšení přehlednosti datového typu jsem také jeho výběr rozdělil do skupin. A díky požadavku Jakuba Sochora se datový typ zobrazuje také v bublině u názvu sloupce ve výpisu.
Odstranění tlačítek pro mazání u záznamu
Adminer umožňuje hromadně mazat záznamy a zjistil jsem, že tuto možnost používám i u smazání jediného záznamu. Odstranil jsem proto tlačítko pro smazání z formuláře pro úpravu záznamu. Snižuje se tím riziko stisknutí tohoto tlačítka omylem, když chce člověk záznam uložit. Podle stejné logiky jsem odstranil i tlačítko pro smazání tabulky, tu lze tedy nyní smazat jen u výpisu všech tabulek v databázi.
Předvyplnění formuláře pro přidání záznamu
Když si nechám zobrazit např. písničky na nějakém albu, tak Adminer nově při vložení záznamu předvyplní toto album do vkládacího formuláře. Přemýšlel jsem, že by se takhle předvyplnily všechny hodnoty hledané operátorem =
, ale nakonec jsem to nechal jen u cizích klíčů, aby se nepředvyplňoval třeba i primární klíč při hledání podle něj. Vzhledem k tomu, že Editor generuje odkazy na provázané záznamy, tak by mohlo jít o užitečné rozšíření.
Historie příkazů
Nedávno přidanou historii příkazů je možné promazat zvláštním tlačítkem (děkuji paranoiqovi). Dříve se mazala pouze při odhlášení.
E-maily
Adminer detekuje podle obsahu pole, zda se v něm nenachází e-mailová adresa a pokud ano, tak z ní vytvoří odkaz. Editor na tyto adresy navíc dovoluje hromadně odeslat zprávy. Formát e-mailové adresy je totožný např. s identifikátorem Jabberu, ale to snad nebude vadit.
Počet řádek v SQL příkazu
Občas se hodí vědět, kolik řádek vrátí ručně zadaný SQL příkaz. Ten sice nenabízí stránkování, takže všechny řádky jsou rovnou vidět, ale kdo se s tím má počítat… Nechtěl jsem do výstupu kvůli této okrajové informaci dávat celý další řádek, takže jsem zvolil malé písmo vedle času, který dotaz zabral. Bylo to nicméně trochu problematické, protože jeden příkaz může vrátit více výsledků (při zavolání uložené procedury), takže v tom případě se zobrazí jen počet řádků prvního výsledku.
Výkonnost
Seznam tabulek v navigaci používal příkaz SHOW TABLE STATUS
, který je s velkými InnoDB tabulkami pomalý. V minulosti se v seznamu totiž zobrazoval i počet záznamů v tabulce a rozlišovala se práce s tabulkami a pohledy. Počet záznamů už se nezobrazuje a práci s pohledy jsem sjednotil s tabulkami, takže jsem v navigaci mohl použít mnohem rychlejší příkaz SHOW TABLES
. Děkuji čtenářům tohoto blogu.
Hromadné operace se záznamy (jako úprava nebo export) se dělaly pomocí příkazu UNION
případně jednotlivě. To je bohužel nutné u tabulek bez primárního klíče (i s takovými musí Adminer korektně pracovat). Do nové verze jsem přidal optimalizaci těchto operací pro tabulky s definovaným (a vybraným) primárním klíčem, kterých je většina.
Adminer také nyní místo XHTML používá HTML, ke kterému se svým Content-Type
hlásí. Jednak to trochu zmenšilo velikost a jednak to tak je správně.
Kvůli lepší rozšiřitelnosti jsem odstranil zkracování názvů uživatelských funkcí, které mělo lehounce pozitivní dopad na výkonnost díky menší velikosti souboru. S extenzí MySQLi to ale mělo dopad mírně negativní, protože vestavěné metody třídy MySQLi_Result bylo potřeba uzavřít do minimalizované obálky.
Opravené chyby
- V MySQL nefunguje příkaz
REVOKE ALL, GRANT OPTION
, i když podle dokumentace fungovat měl. Adminer se ho proto už nepokouší vykonat.
- Nově přidaný CSV import bohužel zcela ignoroval texty uzavřené do uvozovek.
- Při vytváření záznamu se v poslední verzi nepracovalo s výchozími hodnotami (děkuji Jiřímu Pospíšilovi).
- Pokud byl Adminer spuštěn pod HTTPS protokolem, tak zvýrazňovač zdrojového kódu a kontrolor nových verzí způsoboval chybu smíšeného obsahu, protože je Adminer stahoval protokolem HTTP. Přesunul jsem je proto na HTTPS.
- Při editaci záznamu se sloupcem typu
timestamp
se u něj nenastavilo aktuální datum a čas. Nyní se pro něj předvybere funkce NOW()
, což aktuální datum a čas po uložení nastaví. Přitom je vidět i původní hodnota, kterou je možno snadno zachovat (zrušením funkce). Děkuji paranoiqovi.
Zpětná vazba
Pokud chcete nahlásit nějakou chybu nebo požádat o přidání funkčnosti, můžete samozřejmě použít diskusi pod tímto článkem, ale lepší místo na to je oficiální Tracker. Jednak je pak lepší přehled v tom, co se řeší a jednak se počet příspěvků započítává do hodnocení, podle kterého se řadí projekty na SourceForge. K mému překvapení se už Adminer dostal mezi prvních 300 projektů. Totéž platí i pro diskusní fórum.
Nový web
S novou verzí přichází také nový web, za jehož návrh děkuji Janu Smitkovi.
Diskuse
Eda:
> takže pokud se tabulka jmenuje interprets a primární klíč id, tak se spojí např. název InterpretsID, id_interprets nebo interpret (dovoleno je pravidelné množné číslo angličtiny)
Nebylo by logictejsi IntepretId, popr. id_interpret? Id se vztahuje k jednomu zaznamu, neni duvod jej tedy oznacovat mnoznym cislem.
Já si myslím, že by nebylo špatné - pokud mám tabulku interprets - zvážit propojení s interpret_id ...
Na druhou stranu chápu, že je těžké vyhovět všem :)
kozotoč:
Připojuju se ;-)
Já tenhle způsob pojmenování taky používám.
Nechci si moc vymýšlet, ale třeba časem by ten algoritmus mohl umět rozpoznat i nepravidelné množné číslo - např. category <--> categories, supply <--> supplies, atp...
Mimochodem, existuje víc než půl tuctu nepravidelných způsobů tvoření plurálu (rozdílných od prostého přidání "s" na konec), ale to už se asi shodneme na tom, že by byl už velký úlet, chtít, aby to Adminer uměl ;-)
Ale vždyť to jednotné číslo bere…
Nepravidelný tvar se používá jeden a to sice -es, nic dalšího asi dělat nebudu. To by se mi víc líbila čeština – jakž takž by se to dalo udělat tak, že by se vzaly všechny znaky kromě posledních třeba tří z názvu tabulky a to by se porovnalo se stejným počtem znaků ve sloupci. Možná by vznikly duplicity a některé nepravidelnosti by to nepokrylo, ale jakž takž fungovat by to mohlo.
Přesně takhle se to chová, můžete to vyzkoušet. Jsou to jenom příklady a poslední ukazuje, že funguje i jednotné číslo.
těžkotonážní pusa:
A co ona chyba s výchozími hodnotami? Stále je všude přednastavené NULL. Výchozí hodnoty by též bylo záhodno zobrazovat již při vytváření/editaci tabulky (ale to už taky bylo řečeno v diskuzi u předchozí verze).
Jakub Vrána :
Výchozí hodnoty se při vytváření nové položky respektují. Pokud ti to nefunguje, tak prosím o podrobnější popis chyby.
K přesunu výchozích hodnot do editace struktury se už chystám.
těžkotonážní pusa:
wow! stáhla jsem si tu developer verzi a super - přesně tak, jak si myslím, že by to mělo být. v ní už to funguje bezvadně, takže pokud tato má být další verzí, tak na problém s defaultními hodnotami můžeš zapomenout.
velikost souboru může ovlivňovat víc faktorů (třeba podrobnější komentáře), ale -alespoň pro mě- podstatné je držet se konceptu "Keep It Simple, Sam".
Jakub Vrána :
Komentáře v kódu výslednou velikost neovlivňují, protože jsou před kompilací odstraněny. Takže klidně pošli patch. Já už jsem si celý kód takhle jednou prošel, abych ho okomentoval a vzešla z toho spousta inspirace :-).
kozotoč:
Viz toto -
http://php.vrana.cz/adminer-1-11-0.php#d-8970Ano, chyba byla zkulturněna, ale furt je to chyba :-)
Nešlo by (z puntičkářství tobě vlastnímu) to ošetřit a zobrazit pouze výběr databází, jako například hned po přihlášení?
P.S. Díky za 2. verzi Adminera!
Jakub Vrána :
Ono jde o to, že to může být i důsledek nějaké chyby.
kozotoč:
nerozumím, co máš na mysli.
Jakub Vrána :
To, že se nedaří vypsat seznam tabulek, může být důsledek chyby.
Jan Pejša:
Nebylo by lepší si nejdříve udělat nějakou statistiku "nejčastěji používaných akcí" či "nepoužívaných akcí" a teprve podle této statistiky odstraňovat či měnit již hotovou funkčnost?
Narážím tím na "Odstranění tlačítek pro mazání u záznamu", které mi přijde logické, ale samotné zdůvodnění této změny se mi moc nezdá. Pro příště bych navrhnul "automatický sběr informací" při samotné práci s Adminerem a teprve potom změny funkčnosti (změna by podložena alespoň nějakými daty).
Každopádně "Adminer" je výborný nástroj, díky za něj. Přeji nadále mnoho trpělivosti s jeho uživateli :)
Jakub Vrána :
Adminer vyvíjím podle toho, jak mě osobně to přijde správně. Když se někomu něco nezdá, tak se obvykle ozve a já to zvážím.
Konkrétně u této změny jsem čekal, že se někdo ozve a zatím kupodivu nic, i když jsem tomu v článku věnoval docela dost místa.
Možná tuto funkčnost ale přesto vrátím, protože jsem zjistil, že by se mi čas od času přeci jen hodila.
Jan Pejša:
zareaguji tedy ještě jednou a kupodivu stejně: není nad automatické statistiky používaných vlastností :)
paranoiq:
Jakub tím asi myslel, že frekvenci použití jednotlivých vlastnosti testuje na statistickém vzorku jednoho Jakuba Vrány :]
Igor Aufricht:
Zdravím,
nový Adminer je super, v editácii štruktúry tabuľky mi ale chýba možnosť nastaviť stĺpcom DEFAULT hodnotu. Je nejaký dôvod prečo tam táto voľba nie je?
Vďaka.
Jakub Vrána :
Výchozí hodnoty se zatím editují odděleně, ale plánuji to přesunout.
Michal:
Zdravím. Mám dotaz ohledně datového typu enum. Buď to nikde nevidím, nebo při nastavení struktury tabulky není pole pro vyplnění hodnot. Povedlo se mi tam však dostat ony hodnoty přes pole Délka. Je to správný postup nebo jsem se jenom trefil na shodu s SQL dotazem ?
těžkotonážní pusa:
hodnoty u typů ENUM a SET se vypisují do kolonky nazvané (v české verzi) "Délka"
v6ak:
Drobná poznámka: formát Jabber ID není úplně stejný jako formát e-mailové adresy. Jabber ID například může obsahovat před zavináčem i diakritiku a mnohé jiné znaky, i když se to nedoporučuje. Dál, e-mail může mít AFAIK navíc pluska před zavináčem (význam přesně neznám), Jabber ID zase resource.
těžkotonážní pusa:
Adminer (AFAIK) není poštovní nebo IM klient a tato funkce je pouze pomocná, takže není důvod, proč by se Jakub měl věnovat další čas tomuto na úkor jiných (a objektivně řečeno důležitějších) věcí.
v6ak:
Jasně, jen jsem chtěl uvést to tvrzení na pravou míru.
kriplozoik:
Adminer, krom toho, že je na české Wikipedii, se ujal i na té anglické (a, btw. Slovenští braťia by tiež mohli napísať článok, hoci iba výhonok :-))
Impresivní je i jeho srovnání s phpMyAdminem na
http://en.wikipedia.org/wiki/Comparison_of_database_tools . Na té stránce možná, Jakube, najdeš i pár námětů na další rozšíření Adminera - takový typ rozšíření, který stojí za to.
P.S. Koukám.. někdo to tam už aktualizoval ;-)
Prdlořeznictví Krkovička, n. p.:
U úpravy jednoho záznamu by se mně (a jistě i dalším) zamlouvala možnost záznam klonovat. Tedy, kromě tlačítka "uložit" (a "uložit a pokračovat v editaci") i tlačítko "vložit jako nový záznam". To by se tam mělo ukázat jenom pokud má daná tabulka definovaný primární klíč (většina tabulek). Po stisknutí se záznam vloží pomocí INSERT (nikoli UPDATE) a místo primárního klíče se použije NULL, popř. v INSERTu nebude uveden vůbec.
Co ty NATO, Jakube?
Prdlořeznictví Krkovička, n. p.:
A jak o tom přemýšlím, tak by tam "vložit nový záznam" mohlo být i když tabulka primární klíč nemá - v takovém případě by se použil normální INSERT. Možná - pro jednoduchost by šla jeho mysql-ovská mutace INSERT INTO tabulka SET ..., s tím, že u tabulky s primárním klíčem by se tento prostě vynechal.
Jakub Vrána :
Možnost klonovat záznam má Adminer už dlouho, ale je potřeba ho vybrat před editací záznamu. Dělá se to zaškrtnutím záznamu a stisknutím tlačítka Klonovat ve výpisu dat. Jednu dobu byl u každého záznamu přímo i odkaz klonovat, ale moc to překáželo.
Tlačítko pro klonování až v editaci záznamu vede k chybám, protože si člověk říká, že si záznam otevře kvůli klonování a pak ho omylem uloží a tím přepíše původní záznam.
Prdlořeznictví Krkovička, n. p.:
ad první odstavec) - o.k., klonování má, ale ne takové, kde by ti nabídl původní hodnoty k doplnění. Představ si, že máš popis nějakého produktu (pár kilobajtů textu) a pouze mu potřebuješ změnit barvu z černé na bílou. Otevřeš, upravíš, co je potřeba, vložíš jako nový záznam, hotovo. S tvým přístupem je to dvakrát tolik úkonů.
ad druhý odstavec) - ano, to souhlasí. Nicméně, soudný člověk nebude po této chybě za svojí blbost nadávat na Adminera, protože ten za to nemůže ;-)
Jakub Vrána :
Jednu dobu to tak fungovalo – když byl označen jenom jeden záznam, tak se předvyplnila jeho hodnota. Problém byl, že s grupováním byl sice označen jeden záznam, ale reprezentoval celou skupinu. Tak jsem to odstranil s tím, že se navíc alespoň ušetří přenášená data stejných položek.
Nicméně scénář, který popisuješ, dává smysl, takže funkčnost vrátím (a doplním ji o detekci grupování).
Michal:
Mám návrh na úpravu Admineru. Pokud Vám to nepřijde zbytečné.
Při zobrazení tabulky ( sloupce a jejich dat. typy - např. ....adminer.php?db=xxx&table=yyy ) po najetí myší na název sloupce zobrazit jako titulek komentář sloupce.
Tomin:
Opravdu dokonalé. Tento projekt se autorovi povedl a myslím, že hodně lidí se mnou bude souhlasit, že ve zkratkách WAMP a LAMP by měly být dvě A.
Michal:
Říkám si, jestli by nebylo vhodné Adminer trochu upravit ohledně tisku aby měl danou podobu. Název DB->tabulka a její výpis, příp. jiné důl. věci, ostatní pro tisk skrýt. Prostě co nejjednodušší layout. Zkoušel jsem dát tisk a to co z toho vylezlo bylo opravdu strašné.
Jakub Vrána :
Skryl jsem levou navigaci. Dřív tam byla proto, aby se dal vytisknout i seznam tabulek, ale ten má teď už i samostatnou stránku.
Diskuse je zrušena z důvodu spamu.