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.

Snadné vytváření jednoduchých cizích klíčů

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

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.

Jakub Vrána, Adminer, 19.8.2009, diskuse: 42 (nové: 0)

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.

Tomáš Dundáček:

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 ;-)

ikona Jakub Vrána OpenID:

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.

ikona Jakub Vrána OpenID:

Přesně takhle se to chová, můžete to vyzkoušet. Jsou to jenom příklady a poslední ukazuje, že funguje i jednotné číslo.

Robert Vlach:

Ten odkaz na rozšíření http://php.vrana.cz/adminer-rozsiritelnost.php je nefunkční.

ikona Jakub Vrána OpenID:

Ano, článek vyjde až v pátek :-).

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).

ikona Jakub Vrána OpenID:

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.

ikona Jakub Vrána OpenID:

Integroval jsem práci s výchozími hodnotami přímo do editace struktury tabulky. Zmenšila se tím velikost výsledného souboru, podle čehož poznávám, že to byla změna k lepšímu :-).

Prosím všechny, kdo s výchozími hodnotami pracují, ať vyzkouší SVN verzi: http://adminer.svn.sourceforge.net/viewvc/….gz?view=tar

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".

ikona Jakub Vrána OpenID:

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-8970
Ano, 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!

ikona Jakub Vrána OpenID:

Ono jde o to, že to může být i důsledek nějaké chyby.

kozotoč:

nerozumím, co máš na mysli.

ikona Jakub Vrána OpenID:

To, že se nedaří vypsat seznam tabulek, může být důsledek chyby.

ikona Jakub Vrána OpenID:

Elegantně to vyřešil bug https://sourceforge.net/tracker/?func=detail&…&group_id=264133

Pavel Kral:

Krasna prace Jakube..

ikona 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 :)

ikona Jakub Vrána OpenID:

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.

ikona 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.

ikona Jakub Vrána OpenID:

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"

ikona 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í.

ikona 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.

ikona Jakub Vrána OpenID:

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 ;-)

ikona Jakub Vrána OpenID:

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í).

ikona Jakub Vrána OpenID:

Jak jsem řekl, tak jsem udělal.

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.

ikona Jakub Vrána OpenID:

Komentář sloupce jsem před nedávnem nechal přímo zobrazovat. Viz http://adminer.svn.sourceforge.net/viewvc/….gz?view=tar

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.

ikona Jakub Vrána OpenID:

Tedy LAMPA :-).

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é.

ikona Jakub Vrána OpenID:

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.

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.