MYSQL



MYSQL je databázový server a je asi nejrozšířenější na unix-like systémech.Silně doporučuji nastavit rootovské heslo a snažit se jej nezapomenout. Nechá se sice dostat zpět,ale za tu pakárnu to nestojí.



OBSAH


Základy
Instalace
Problémy s připojováním
Struktura MYSQL
Typy tabulek


BEZPEČNOST-Práva a přihlašování do MYSQL
Databáze mysql
Tipy pro bezpečnější MYSQL
Příkazy pro správu uživatelů a práv
Dočasné povolení roota odkudkoliv
Shrnutí zakládání a odebírání práv a uživatelů
Ztráta hesla roota


MySQL-příkazy
Databáze
Tabulky
Změny dat v tabulce


Funkce a operátory
Funkce pro práci s textem
Funkce pro práci s datem a časy
Matematické funkce
Operátory


Detailnější rozvedení
Kódování-problémy s češtinou
Spojování výběrů z tabulek
Indexy a klíče v tabulkách
Logování
Externí příkazy
Zjištění informací o nastavení MYSQL, DB a tabulkách


Zálohování, exporty a importy
Mysqldump
Backup table
Select * into outfile
3rdPARTY
Import dat do db
Restore table
Load data infile
Import CSV souborů - MYSQLIMPORT


Nástroje pro práci s MYSQL
Mysqldump
Myphpadmin
Mysqlshow
Myisamchk
Myisampack
Mysql Query Browser a Mysql Administrator



Instalace


nainstalujeme MYSQL server
cd /usr/ports/databases/mysql50-server && make install clean


po instalaci povolit v /etc/rc.conf
edit /etc/rc.conf

# MySQL Server

mysql_enable="YES"
mysqllimits_enable="NO"

spustit DB
/usr/local/etc/rc.d/mysql-server start


nastavit heslo roota a přihlásit se do DB
mysql spuštění DB
set password = password('nejakeheslo'); nastavení rootovskýho hesla
\q vyskočení z DB
test přihlášení
mysql -u root -pnejakeheslo (to "p" na zacatku značí password-musí tam být)

Problémy s připojováním


Pokud Mysql neposlouchá na síti, ale odpovídá na dotazy na localhostu, podívejte se do my.cnf
ee /etc/my.cnf
a zakomentujte následující řádku
#bind-address=127.0.0.1
případně tam uvedte vaši sít´ ze které se budete připojovat

zrestartujte Mysql a mělo by to chodit

Další možnost je, že v ee /etc/my.cnf je řádka skip-networking
tak ji zakomentujte

Pokud se nemůžete přihlásit, zkontrolujte, zda máte správně nastavený DNS server (v případě že host není IP adresa ,ale jmenný název PC), nebo jste se neupsali přizadávání hosta.

Pokud stále nic, zkuste zkontrolovat firewall jak na serveru, tak i na klientovy, jestli není blokovaný port 3306



Fyzické umístnění souborů Myslq je v
/var/db/mysql



Struktura MYSQL


umístnění tabulek
/var/db/mysql
v tomto umístnění jsou adresáře, které odpovídají názvům jednotlivých DB
v těchto "databázových adresářích" se nacházejí další soubory
nazev-TB.frm soubory s příponou .frm obsahují schéma TB
nazev-DB.opt soubory s příponou .opt obsahují nastavení databáze
nazev-TB.MYD soubory s příponou .MYD obsahují data MYISAM tabulek
nazev-TB.MYI soubory s příponou .MYI obsahují indexy MYISAM tabulek
nazev-TB.ibd soubory s příponou .ibd obsahují data a indexy InnoDB tabulek
nazev-TB.TRG soubory s příponou .TRG zdroják tabulek definovaných triggery



Velikost písmen
Mysql rozlišuju velikost písmen pouze v názvech DB a tabulek, v názvech sloupců se velikost písmen nerozlišuje. Př. DB Dochazka není to samé jako dochazka


Struktura DB
DB obsahuje tabulky.
Tabulky obsahují sloupce
Sloupce obsahují data


Pravidla pro vytváření DB
Vyhnout se sloupcům se stejným obsahem
Tabulku tvořit pro každou skupinu příslušných dat
Každý záznam musí být jednoznačně identifikovatelný primárním klíčem
Jestliže se opakují obsahy některých sloupců v různých záznamech, tabulka by se měla rozdělit na několik jiných tabulek a tyto tabulky musíme propojit cizími klíči(odkazy)
Sloupce přímo nezávisející na prim. klíči musíme přesunout do samostatné tabulky.
Nepoužívat nicneříkající názvy tabulek a sloupců (data1,sloupec1,apod),stěžuje to orientaci
Při návrhu DB je dobré si sednout a nakreslit si strukturu a závislosti jednotlivých tabulek na papír


Typy tabulek

Tabulky pro číselné hodnoty
Celá čísla
TINYINT(m) rozsah čísel od -128 po 127. Zabírá 8 bajtů
SMALLINT(m) rozsah čísel od -32 768 po 32 767. Zabírá 16 bajtů
MEDIUMINT(m) rozsah čísel od -8 388 608 po 8 388 607. Zabírá 24 bajtů
INT(m) nebo INTEGER(m) rozsah čísel od -2 147 483 684 po 2 147 483 683. Zabírá 32 bajtů
SERIAL(m) rozsah čísel +- 9,22 x 10 na 18. Zabírá 64 bajtů
Pro celá čísla-(m) je nepovinný údaj, ktery určuje při příkazu SELECT šířku sloupce-neovlivnuje rozsah hodnot při ukládání
FLOAT(m,d) 8místná přesnost. Zabírá 4 bajty
DOUBLE(m,d) 16místná přesnost. Zabírá 8 bajtů
Pro destinná čísla-(m,d) jsou nepovinné údaje, které určují při příkazu SELECT počet čísel před a za desetinnou čárkou- m neovlivnuje rozsah hodnot při ukládání, ale d zaokrouhluje
DECIMAL(p,s) nebo NUMERIC nebo DEC libovolný počet číslic.Zabírá 1 bajt na číslici + 2bajty na režii
Pro destinná čísla s pevnou řádovou čárkou-(p) je celkový počet číslic a (s)je počet číslic za desetinnou čárkou. (5,2) tedy znamená rozsah od -99,99 do 999,99. Mínus je také jeden znak. Pokud nezadáme rozsah, MYSQL použije (10,0)


Tabulky pro datum a čas
DATE datum ve tvaru 2009-01-30, rozsah od 1001-01-01 do 999-12-31. Zabírá 3 bajty
TIMEčas ve tvaru 23:50:01, rozsah +- 838:59:59.Zabírá 3 bajty
DATETIMEkombinace DATE a TIME ve tvaru 2009-01-30 23:50:01.Zabírá 8 bajtů
YEARrok v rozsahu 1900-2155.Zabírá 1 bajt
TIMESTAMP vloží aktuální čas při změně záznamu

Formát zobrazení datového typu TIMESTAMP Datový typ Formát zobrazení
TIMESTAMP(14)YYYYMMDDHHMMSS
TIMESTAMP(12)YYMMDDHHMMSS
TIMESTAMP(10)YYMMDDHHMM
TIMESTAMP(8)YYYYMMDD
TIMESTAMP(6)YYMMDD
TIMESTAMP(4)YYMM
TIMESTAMP(2)YY


Tabulky pro text
CHAR(n)max 255 znaků. Text pevné délky. CHAR(5) vyžaduje v každém záznamu 5 znaků
VARCHAR(n)max 65 536 znaků(od verze 5). Text proměnné délky. VARCHAR(50) bude oříznut na 50 znaků
TINYTEXT max 255 znaků. Text proměnné délky.
TEXT max 2na16 znaků. Text proměnné délky.
MEDIUMTEXTmax 2na24 znaků. Text proměnné délky.
LONGTEXTmax 2na32 znaků. Text proměnné délky.


Tabulky pro datové objekty
BIT(n)(n) je počet bitů, max 64
TINYBLOBmax 255 bajtů
BLOB max 2na 16 bajtů
MEDIUMBLOB max 1,6 MB
LONGBLOB max 4,2 GB


Atributy sloupců

Nastavení a atributy sloupců
NULL sloupec může obsahovat hodnotu NULL(default)
NOTNULLsloupec NEmůže obsahovat hodnotu NULL
DEFAULT xxxHodnot xxx bude použita jako výchozí, pokud nevložíme jinou. Hodnoty uvádíme v uvozovkách
DEFAULT CURRENT_TIMESTAPMu sloupců TIMESTAMP bude vložen aktuální čas, jestliže vkládáme nový záznam
ON UPDATE CURRENT_TIMESTAPMu sloupců TIMESTAMP bude vložen aktuální čas, jestliže upravujeme existující záznam
PRIMARY KEYDefinuje sloupec jako primární klíč
AUTO_INKREMENTautomaticky navyšuje posloupnost čísel. Musí být zadáno NOT NULL a PRIMARY KEY. Můžeme ještě navíc určit výchozí hodnotu: ...AUTO_INCREMENT=50;
UNSIGNEDcelá čísla budou vložena bez znamének. Pozor-výpočty budou prováděny jako s kladnými čísly
CHARACTER SETnazev znakové sady. Pro text zadává znakovou sadu



BEZPEČNOST-Práva a přihlašování do MYSQL


Při přihlašování jsou vyžadovány 3 údaje.
Jméno Uživatelské jméno, pod kterým se přihlašujete. Při přihlašování se uvádí za parametr -u
Heslo Při přihlašování se uvádí za parametr -p Po instalaci je dafaultně heslo roota prázdé, je proto třeba jej nastavit pomocí příkazu
set password = password('nejake_heslo');

Pozor, nepoužívejte jméno a heslo do DB stejné jako do systémového účtu. Často se jména a hesla vkládají jako plaintext a pak hrozí kompromitace nejen DB, ale i systémového účtu.
Jméno hostitele Je to IP adresa, případně resolvovatelný název MYSQL serveru. V případě že je server i klient na jednom stroji, tento údaj se nemusí uvádět


Užitečné příkazy
SHOW VARIABLES;vypíše nastavení MYSQL
STATUSvypíše aktuálně přihlášeného uživatele a dalších několik údajú o kodování, verzi serveru adt.
SHOW PRIVILEGES; zobrazí výpis možných práv




Práva k DB jsou uložena v DB mysql, vylistovat si uživatele v systému můžeme příkazy
USE MYSQL;
SELECT user, host, password FROM user;


user je uživatelské jméno
host je odkud se může uživatel připojovat
password je zakriptované heslo

Pokud chceme zjistit, jaká mají uživatelé práva k nějaké DB, použijeme následující dotaz.
SELECT * FROM db WHERE db='jmeno';


Databáze mysql


Celý systém práv v MYSQL řídí DB nazvané mysql. Obsahuje následující tabulky
user Kontroluje kdo se smí z jakého počítače přihlásit. Obsahuje také globální nastavení(defaltní hodnota je N zakázáno).
db Přiřazuje práva k jednotlivým databázím. Aby tato tabulka byla brána v potaz, musí být v tabulce user hodnota N
tables_priv Určuje kdo smí přistupovat k jakým tabulkám databáze. Aby tato tabulka byla brána v potaz, musí být v tabulce user hodnota N
columns_priv Určuje kdo smí přistupovat k jakým sloupcům tabulky. Aby tato tabulka byla brána v potaz, musí být v tabulce user hodnota N
host Rozšiřuje tabulku db informacemi o povolených jménech hostitele (které nejsou přítomné v db-mají tento sloupec prázdný). Jestliže najde odpovídající záznam, nastaví oprávnění z tabulek db a host logickou spojkou AND
procs_priv Určuje kdo smí spouštět jednotlivá uložené procedury.Tabulka je nutná jen pro uživatele, kteří nemají globální oprávnění v tabulce user




Postup ověřování uživatele v MYSQL
V první fázi se ověřuje zda uživatel se může přihlásit do MYSQL na základě hodnot v DB mysql a sloupcích user, host a password
POZOR: Pokud budete mít několik stejných uživatelů (root) a různé hodnoty ve sloupci host , tak přednostně se použije hodnota bez zástupných znaků (% a _)
Např. root z localhost má přednost před root z %.To znamená, že pokud se přihlašujete jako root z lokálního PC, má root z localhost menší práva než root z % a použijí se práva roota z localhostu.
V druhé fázi se kontrolují práva přístupu k DB, tabulkám a sloupcům dle tabulek db, host, tables_priv a column_priv.Aby tyto tabulky byly brána v potaz, musí být v tabulce user hodnota N u přislušného oprávnění


Tabulka user
Názvy sloupců jsou dostatečně vypovídající na to, aby bylo jasné jaká práva nastavují. Poslední 4 sloupce (začínající na max) udávají následující
max_questions kolik dotazů příkazem SELECT můžete provést za 1h (0=neomezeně)
max_updates kolik změn příkazem UPDATE můžete provést za 1h (0=neomezeně)
max_connections kolik připojení můžete provést za 1h (0=neomezeně)
max_user_connections kolik připojení může provést jeden uživatel v jednu chvíli (0=neomezeně)
název sloupce typ
Host char(60)
User char(16)
Password char(45)
Select_priv enum('N', 'Y') -výchozí N
Insert_priv enum('N', 'Y') -výchozí N
Update_priv enum('N', 'Y') -výchozí N
Delete_priv enum('N', 'Y') -výchozí N
Create_priv enum('N', 'Y') -výchozí N
Drop_priv enum('N', 'Y') -výchozí N
Reload_priv enum('N', 'Y') -výchozí N
Shutdown_priv enum('N', 'Y') -výchozí N
Process_priv enum('N', 'Y') -výchozí N
File_priv enum('N', 'Y') -výchozí N
Grant_priv enum('N', 'Y') -výchozí N
References_priv enum('N', 'Y') -výchozí N
Index_priv enum('N', 'Y') -výchozí N
Alter_priv enum('N', 'Y') -výchozí N
Show_db_priv enum('N', 'Y') -výchozí N
Super_priv enum('N', 'Y') -výchozí N
Create_tmp_table_priv enum('N', 'Y') -výchozí N
Lock_tables_priv enum('N', 'Y') -výchozí N
Execute_priv enum('N', 'Y') -výchozí N
Repl_slave_priv enum('N', 'Y') -výchozí N
Repl_client_priv enum('N', 'Y') -výchozí N
Create_view_priv enum('N', 'Y') -výchozí N
Show_view_priv enum('N', 'Y') -výchozí N
Create_routine_priv enum('N', 'Y') -výchozí N
Alter_routine_priv enum('N', 'Y') -výchozí N
Create_user_priv enum('N', 'Y') -výchozí N
ssl_type enum('', 'Any', 'X509', 'SPECIFIED')
ssl_cipher blob
x509_issuer blob
x509_subject blob
max_questions int
max_updates int
max_connections int
max_user_connections int



Tabulka db
název sloupce typ
Host char(60)
Db char(64)
User char(16)
Select_priv enum('N', 'Y') -výchozí N
Insert_priv enum('N', 'Y') -výchozí N
Update_priv enum('N', 'Y') -výchozí N
Delete_priv enum('N', 'Y') -výchozí N
Create_priv enum('N', 'Y') -výchozí N
Drop_priv enum('N', 'Y') -výchozí N
Grant_priv enum('N', 'Y') -výchozí N
References_priv enum('N', 'Y') -výchozí N
Index_priv enum('N', 'Y') -výchozí N
Alter_priv enum('N', 'Y') -výchozí N
Create_tmp_table_priv enum('N', 'Y') -výchozí N
Lock_tables_priv enum('N', 'Y') -výchozí N
Create_view_priv enum('N', 'Y') -výchozí N
Show_view_priv enum('N', 'Y') -výchozí N
Create_routine_priv enum('N', 'Y') -výchozí N
Alter_routine_priv enum('N', 'Y') -výchozí N
Execute_priv enum('N', 'Y') -výchozí N



Tabulka host
název sloupce typ
Host char(60)
Db char(64)
Select_priv enum('N','Y')
Insert_priv enum('N','Y')
Update_priv enum('N','Y')
Delete_priv enum('N','Y')
Create_priv enum('N','Y')
Drop_priv enum('N','Y')
Grant_priv enum('N','Y')
References_priv enum('N','Y')
Index_priv enum('N','Y')
Alter_priv enum('N','Y')
Create_tmp_table_priv enum('N','Y)
Lock_tables_priv enum('N','Y')
Create_view_priv enum('N','Y')
Show_view_priv enum('N','Y')
Create_routine_priv enum('N','Y')
Alter_routine_priv enum('N','Y')
Execute_priv enum('N','Y')



Tabulka tables_priv
název sloupce typ
Host char(60)
Db char(64)
User char(16)
Table_name char(64)
Grantor char(77)
Timestamp timestamp
Table_priv set('Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter', 'Create View', 'Show view')
Column_priv set('Select', 'Insert', 'Update', 'References')



Tabulka columns_priv
název sloupce typ
Host char(60)
Db char(64)
User char(16)
Table_name char(64)
Column_name char(64)
Timestamp timestamp
Column_priv set('Select','Insert','Update','References')



Tabulka procs_priv
název sloupce typ
Host char(60)
Db char(64)
User char(16)
Routine_name char(64)
Routine_type enum('FUNCTION','PROCEDURE')
Grantor char(77
Proc_priv set('Execute','Alter Routine','Grant')
Timestamp timestamp




Tipy pro bezpečnější MYSQL

Nastavení hesla root
UPDATE user SET password = PASSWORD('nove-heslo') WHERE user = 'root'; Nastaví heslo pro uživatele root na nove-heslo. Tento příkaz se může spustit kdekoliv v DB, pokud jsme přihlášeni jako root
Změna názvu superuživatele
UPDATE user SET user = 'novy_root' WHERE user = 'root'; Přejmenuje uživatele root na novy_root. Pokud se budeme tedy pak v budoucnu přihlašovat jako superuživatel, použijeme nové jméno
Odstanění anonymních uživatelů
USE MYSQL;
DELETE FROM user WHERE user = '';
Tímto jsme zlikvidovali všechny uživate, kteří nemají ve sloupci user žádnou hodnotu. Jen registrovaní uživatelé se mohou připojovat
Nastavení hesla všem uživatelům
USE MYSQL;
UPDATE user SET password = PASSWORD('nove-heslo') WHERE password = '';
Všem uživatelům, kteří měli prázdné heslo jsme tímto nastavili heslo nove-heslo.
Přístup uživatelů odevšad
UPDATE user SET host = '192.168.0.%' WHERE host = '%'; je třeba zvážit, jestli má nějaký uživatel mít právo přistupovat z jakéhokoliv stroje. Takový uživatelé mají ve sloupci host pouze znak procenta % zde je povolen přístup ze sítě 192.168.0.0/24. Můžeme použít IP, resolvovatelný název, případně localhost
POZOR: je třeba znovunačíst práva, protože mysql si uchovává kopii v RAM. Nezapomínat na to !!!
provedeme to příkazem
FLUSH PRIVILEGES;





Příkazy pro správu uživatelů a práv
PříkazPopis
GRANTVytvoření nového uživatele a přidání práv
Syntaxe
GRANT opravneni [(seznam sloupců)] ON JmenoDB.JmenoTB TO Jmeno_uzivatele@umistnení IDENTIFIED BY 'nejake_heslo';
Vysvětlení částí příkazu

za příkaz GRANT píšeme oprávnění a volitelně seznam sloupců

Zvláštní práva
Zvláštní práva
PrávoVztahuje se na - Popis
SELECT tabulky, sloupce - Povoluje vybírat záznamy z tabulek.
INSERT tabulky, sloupce - Povoluje vkládat nové řádky do tabulky.
UPDATE tabulky, sloupce -Povoluje obnovovat hodnoty záznamů v tabulkách.
DELETE tabulky -Povoluje odstraňovat záznamy (řádky) z tabulek.
INDEX tabulky - Povoluje vytvářet a odstraňovat indexy z tabulek.
ALTER tabulky - Povoluje měnit strukturu stávajících tabulek (přejmenovávat nebo přidávat sloupce, měnit datové typy sloupců).
CREATE databáze, tabulky - Povoluje vytvářet nové databáze a tabulky.
DROP databáze, tabulky - Povoluje odstranit databáze a tabulky.


Uživatelská práva
PrávoPopis
CREATE TEMPORARY TABLES Povoluje administrátorovi používat v příkazu CREATE TABLE klíčové slovo TEMPORARY.
FILE Povoluje načítání dat do tabulky ze souborů a obráceně.
LOCK TABLES Povoluje explicitní použití příkazu LOCK TABLES.
PROCESS Povoluje administrátorovi zobrazit si procesy serveru patřící libovolnému uživateli.
RELOAD Povoluje administrátorovi znovu načíst tabulky práv a synchronizovat práva, hostitele, protokoly a tabulky.
REPLICATION CLIENT Povoluje používat na řídicích a podřízených serverech SHOW STATUS.
REPLICATION SLAVE Povoluje podřízeným serverům se připojit k řídicímu serveru.
SHOW DATABASES Povoluje prohlížet si všechny databáze. Pokud není nastaven, vidí uživatel pouze databáze, ke kterým má práva.
SHUTDOWN Povoluje administrátorovi ukončit MySQL server.
SUPER Povoluje administrátorovi ukončit vlákna patřící libovolnému uživateli.


Administrátorská práva
PrávoPopis
ALL Přidělí všechna předešlá práva.
USAGE Nepřidělí žádná práva, uživatel se může pouze přihlásit.
GRANT OPTION Povoluje uživateli přidávat práva, ale maximálně ta, která má sám
CREATE USER Povoluje uživateli vytvářet nové uživatele



za příkaz ON definujeme na co se práva vztahují
JmenoDB.JmenoTB jedna tabulka v zadané DB
JmenoDB.JmenoProcedury jedna procedura
JmenoDB.* všechny tabulky v zadané DB
JmenoTB jedna tabulka v aktuální DB
* všechny tabulky v aktuální DB
*.* práva na vše



za příkaz TO definujeme jméno uživatele a za zavináč odkud se muže připojovat
Jmeno_uzivatele@umistnení uživatel z jednoho hosta
Jmeno_uzivatele@umistnení uživatel z jednoho hosta, který může mít ve jménu a v hostu spec. znaky
Jmeno_uzivatele uživatel na všech počítačích
''@umistnení všichni uživatelé z jednoho hosta
'' všichni uživatelé odevšad



volitelně-za příkaz IDENTIFIED BY píšeme heslo uzavřené do uvozovek. Pokud toto neuvedeme, tak u nového uživatele bude heslo prázdné a u uživatele, který heslo má , ale přidáváme jen práva, zůstane heslo stejné.

Příkazem GRANT se oprávnění pouze přidávají a nelze je pomocí tohoto příkazu odebírat.Pro odebrání použijeme příkaz REVOKE.
PříkladyPopis příkladu
GRANT ALL ON testovaci.* to uzivak@localhost IDENTIFIED BY 'nejake_heslo'; Pro DB testovaci nastaví všechny práva a vytvoří uživatele uzivak, který může přistupovat pouze z localhostu a přiřadí mu heslo nejake_heslo
GRANT ALL ON testovaci.* to uzivak@'%' IDENTIFIED BY 'nejake_heslo'; stejné jako předcházející, ale uživatel může přistupovat odkudkoliv
GRANT ALL ON *.* to uzivak@'%' IDENTIFIED BY 'nejake_heslo'; stejné jako předcházející, ale uživatel může navíc přistupovat ke všem DB
GRANT ALL ON *.* to uzivak@'%' IDENTIFIED BY 'nejake_heslo' WITH GRANT OPTION; stejné jako předcházející, ale uživatel může navíc měnit přístupová práva-je z něj root(superuživatel)
GRANT select, insert ON testovaci.* to uzivak@localhost IDENTIFIED BY 'nejake_heslo'; stejné jako první příklad, ale nastaví se pouze práva select a insert
.
PříkazPopis
REVOKEodebírá práva k DB a tabulkám
Syntaxe
REVOKE opravneni [(seznam sloupců)] ON databaze.tabulka FROM uzivatel@umistneni;
Vysvětlení částí příkazu
za příkaz REVOKE uvádíme odebíráné práva a volitelně seznam sloupců-stejné jako u příkazu GRANT
za příkaz ON definujeme na co se práva vztahují-stejné jako u příkazu GRANT
za příkaz FROM definujeme jméno uživatele a za zavináč odkud se připojuje
PříkladyPopis příkladu
REVOKE all ON *.* FROM uzivatel@localhost; odebere veškerá oprávnění ze všech DB a tabulek pro uživatele uzivatel, který se připojuje z localhostu
.
PříkazPopis
SHOW GRANTS Zobrazení přístupových práv
Syntaxe
SHOW GRANTS FOR uzivatel@umistnen;
Vysvětlení částí příkazu
za příkaz SHOW GRANTS FOR uvedeme uživatele a jeho umístnění
PříkladyPopis příkladu
SHOW GRANTS FOR root@localhost;
.



Dočasné povolení roota odkudkoliv


Čas od času potřebujeme povolit rootovské přihlášení i z jiných strojů než je localhost. Např budete chtít z Windóóózů z aplikace Mysqladmin natáhnout script, kterým vytvoříte novou DB a pod. Protože root má povolení jen z localhostu, potřebujete jej povolit aby naslouchal na všech adresách (nechá se to nastavit, jak již víme, i z jednotlivé IP, ale proč to komplikovat). Je několik postupů. ale následující je asi nejjednodušší a pokud to budeme dělat častěji, není problém jej hodit do scriptu a ten spouštět jen jeho zavoláním.

přihlásíme se do Mysql jako root
mysql -uroot -pHESLO

vybereme DB mysql
use mysql;

vylistujeme si uživatele a povolení, odkud se smějí přihlašovat
select host, user from user;
localhost | root

upravíme odkud se smějí přihlašovat
update user set host='%' where user='root' and host="localhost";

zkontrolujeme, zda se zadařilo a jak jsme šikovní
select host, user from user;
% | root

znovunačteme práva, aby se změna projevila
flush privileges;


Když provedeme co jsme potřebovali, tak vše vrátíme zpět
update user set host='localhost' where user='root' and host="%";

zkontrolujeme
select host, user from user;
localhost | root

znovunačteme práva
flush privileges;

a to je vše



Shrnutí zakládání a odebírání práv a uživatelů



Vytvoření uživatele
GRANT ALL ON *.* to uzivak@localhost IDENTIFIED BY 'nejake_heslo';

GRANT ALL ON testovaci.* to uzivak@localhost IDENTIFIED BY 'nejake_heslo';
pokud již existuje uzivak@localhost můžeme mu příkazem GRANT přidat práva, nebo změnit heslo, ale nemůžeme mu práva odebrat


Nastavení jednotlivých práv
GRANT select, insert, update, delete ... přístup,vkládání, upravování a mazání v DB

GRANT insert, update, delete ... zakázání změn v DB

GRANT select ... přístup k DB


Odebrání práv
REVOKE all ON *.* FROM uzivatel@localhost;
příkaz REVOKE pouze odebírá práva, ale NEDOKÁŽE odstranit uživatele


Odstranění uživatele
DELETE FROM user WHERE User = "Uzivatel_kterého_odstranujete" AND Host="umistneni";

DELETE FROM db WHERE User = "Uzivatel_kterého_odstranujete" AND Host="umistneni";

FLUSH PRIVILEGES ;



Zobrazení přístupových práv
SHOW GRANTS FOR root@localhost;


Vzorové založení uživatele
Občas je třeba , hlavně u PHP scriptů stažených z internetu, které používají DB vytvořit nového uživatele a nastavit práva k DB. Většina scriptů je psaná tak, že vyžadují root přístup do DB, což je samozřejmě špatně. Všechny tyto webové aplikace by měli běžet pod jiným uživatelem. Zde je postup jak toho docílit. Tento postup využívá pro vytvoření uživatele příkaz INSERT, ale mohlo by se to udělat i přikazem GRANT.

#spravce=nový uživatel
#heslo=heslo uživatele
#chat=databáze pro kterou zakládáme uživatele

mysql -u root -pVase_Heslo

USE mysql;

INSERT INTO user (Host, User, Password) VALUES ('localhost','spravce',password('heslo'));

INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv)) VALUES ('localhost', 'chat', 'spravce', 'Y', 'Y', 'Y', 'Y');


GRANT USAGE ON chat.* TO spravce@localhost;

GRANT SELECT, INSERT, DELETE, UPDATE ON chat.* TO spravce@localhost;

FLUSH PRIVILEGES;

CREATE DATABASE CHAT;



Ztráta hesla roota


Může se stát, že se vám podaří zapomenout heslo roota. Následující postup umožní nastavit nové heslo.

1. ukončíme MYSQL
/usr/local/etc/rc.d/mysql-server stop

2. upravíme config
ee /etc/my.cnf
a vložíme do něj řádku do sekce [mysqld]
skip_grant_tables

3. spustíme MYSQL
/usr/local/etc/rc.d/mysql-server start

4. přihlásíme se do MYSQL
mysql -uroot

5. upravíme hesla roota
USE mysql;

UPDATE user SET password = PASSWORD('nove-heslo') WHERE WHERE user='root' AND host='localhost';

UPDATE user SET password = PASSWORD('nove-heslo') WHERE WHERE user='root' AND host='jmenoPocitace';


6. zastavíme MYSQL -viz bod 1.

7. odebereme z configu řádku skip_grant_tables -viz bod 2

8. nastartujeme MYSQL -viz bod 3


MySQL-příkazy



Databáze
PříkazPopis
CREATE DATABASE vytvoří databázi
Syntaxe
CREATE DATABASE [IF NOT EXISTS] JmenoDB volbyDB;
Vysvětlení částí příkazu
za příkaz CREATE DATABASE vložíme název vytvářené DB

IF NOT EXISTS -Volitelný příkaz IF NOT EXISTS způsobí, že se mysql nebude pokoušet vytvořit DB s tímto jménem, pokud již tato existuje.

za jmémo DB ještě můžeme uvést volby, které DB specifikují

COLLATE znak_sada -data budou řazena podle zadané znakové sady, pokud se neuvede, DB bude dle znak. sady MYSQL

CHARACTER SET znak_sada-data budou ve vybrané znakové sadě, pokud se neuvede, DB bude dle znak. sady MYSQL
PříkladyPopis příkladu
CREATE DATABASE IF NOT EXISTS JmenoDB;vytvoří DB JmenoDB
CREATE DATABASE JmenoDB CHARACTER SET latin2 ;vytvoří DB JmenoDB s kodováním latin2
.
PříkazPopis
ALTER DATABASEupravuje vlastnosti DB
Syntaxe
ALTER DATABASE JmenoDB volbyDB;
Vysvětlení částí příkazu
za příkaz ALTER DATABASE vložíme název upravované DB

pak následují volby, které mění vlasnosti

COLLATE znak_sada -data budou řazena podle zadané znakové sady, pokud se neuvede, DB bude dle znak. sady MYSQL

CHARACTER SET znak_sada-data budou ve vybrané znakové sadě, pokud se neuvede, DB bude dle znak. sady MYSQL
PříkladyPopis příkladu
ALTER DATABASE JmenoDB CHARACTER SET latin2 ; upraví DB JmenoDB na kodování latin2
.
PříkazPopis
SHOW DATABASES vypisuje vytvořené DB
Syntaxe
SHOW DATABASES [LIKE vzor];
Vysvětlení částí příkazu
s volbou LIKE můžeme filtrovat výpis
PříkladyPopis příkladu
SHOW DATABASES LIKE 'test%';vypíše databáze, s nepovinným omezením LIKE zde vyhledá pouze DB , které mají na začátku názvu test
.
PříkazPopis
SHOW CREATE DATABASE vypisuje vlasnosti vybrané DB
Syntaxe
SHOW CREATE DATABASE;
Vysvětlení částí příkazu
za příkaz CREATE CREATE DATABASE vložíme název vytvářené DB
PříkladyPopis příkladu
SHOW CREATE DATABASE pokusna;výsledek (pokusna | CREATE DATABASE `pokusna` /*!40100 DEFAULT CHARACTER SET latin1 */ )
.
PříkazPopis
USE vstoupení do DB
Syntaxe
USE JmenoDB;
Vysvětlení částí příkazu
za příkaz USE vložíme název DB se kterou chceme pracovat
PříkladyPopis příkladu
USE JmenoDB;vstoupení do DB JmenoDB
.



Tabulky
PříkazPopis
CREATE TABLEvytvoří tabulku
Syntaxe
CREATE [TEMPORARY] TABLE Jmeno_tabulky [IF NOT EXIST] Jmeno_tabulky (název_sloupce typ_sloupce [volby_sloupce] [index]) volby_tabulky;
Vysvětlení částí příkazu
V závorce můžeme definovat více sloupců (v závorce je oddělujeme čárkou a mezerou)

za příkaz CREATE TABLE napíšeme název tabulky, za slovem CREATE volitelně následuje TEMPORARY pro dočasné tabulky

poté volitelně následuje IF NOT EXIST, pokud nechceme obdržet chybu při vytváření tabulky existujícího jména

do závorky vepíšeme název sloupce,typ sloupce (INT,TEXT), volby sloupce
NULL/ NOT NULL -- U všech typů -- zaručí, se se nesmí vložit prázdná hodnota
USIGNED -- U číselných typů -- celočíselných typů můžeme zdvojnásobit jejich kladné rozmezí
ZEROFILL -- U číselných typů -- slouží k automatickému doplňování nul(INT (5) ZEROFILL a zadáme číslo 5 doplní jej to na 00005)
BINARY -- CHAR, VARCHAR -- řetězce se budou ukládat jako binární řetězce
DEFAUL / DEFAUL CURRENT_TIMESTAMP -- U všech typů kromě BLOB a TEXT -- pokud se nevyplní, vloží se předvyplněná hodnota -CREATE TABLE Zakaznik (Zeme char (15) NOT NULL DEFAULT “CSR“);
ON UPDATE CURRENT_TIMESTAMP
AUTO_INCREMENT / IDENTITY -- U všech typů INT -- při zadání nového záznamu do tabulky se do pole automaticky vloží číslo o jedno vyšší, než bylo dosud použito
PRIMARY KEY -- U všech typů -- každý záznam musí mít jedinečnou hodnot
CHARACTER SET / COLLATE -- CHAR, VARCHAR -- definuje znakovou sadu a sadu pro řazení
COMMENT nejaky_text -- popis sloupce

index definuje index, jehož působnost zahrnuje jeden, nebo kěkolik sloupců-volby
INDEX [název_indexu](sloupce_indexu)
INIQUE [INDEX] [název_indexu](sloupce_indexu)
PRIMARY KEY (sloupce_indexu)
FULLTEXT [název_indexu](sloupce_indexu)
SPATIAL INDEX [název_indexu](sloupce_indexu)
FOREIGN KEY [c1_nazev klice](sloupec1) REFERENCES tabulka2 (sloupec2)

volby tabulky
ENGINE=MYISAM | HEAP | INODB
ROW_FORMAT=dynamic | default | static compressed
AUTO_INCREMENT=1000000 -- udává počáteční hodnotu sloupce AUTO_INCREMENT (1000000 pro 6timístná čísla)
CHECKSUM=0 | 1 -- zapíná vypíná kontrolní součty
PACK_KEYS=0 | 1 -- zmenšuje velikost indexu
DELAY_KEY_WRITE=0 | 1 -- vypne aktualizaci indexu po každé změně
COMMENT nejaky_text -- popis tabulky, zobrazí se příkazem SHOW CREATE TABLE;
CHARACTER SET / COLLATE -- definuje znakovou sadu a sadu pro řazení
PříkladyPopis příkladu
CREATE TABLE Jmeno_tabulky; vytvoří tabulku Jmeno_tabulky
CREATE TABLE Jmeno_tabulky (jmeno varchar(20), prijmeni varchar(40));vytvoří tabulku Jmeno_tabulky, sloupec jmeno o delce 20 znaků a sloupec prijmeni o délce 40 znaků
CREATE TABLE Jmeno_tabulky Produkty (Jmeno_sloupce INT AUTO_INCREMENT PRIMARY KEY NOT NULL); vytvoří tabulku Jmeno_tabulky,sloupec Jmeno_sloupce, který je primární a sám automaticky navyšuje číslo řádku
.
PříkazPopis
SHOW CREATE TABLE vypíše strukturu tabulky, text lze použít pro vytvoření tabulky
Syntaxe
SHOW CREATE TABLE Jmeno_tabulky;
Vysvětlení částí příkazu
za příkaz SHOW CREATE TABLE udáváme jméno DB
PříkladyPopis příkladu
SHOW CREATE TABLE Jmeno_tabulky;vypíše strukturu tabulky Jmeno_tabulky
.
PříkazPopis
ALTER TABLE změní strukturu tabulky
Syntaxe
ALTER TABLE Jmeno_tabulky Volby_tabulky;
Vysvětlení částí příkazu
za příkaz ALTER TABLE se uvádí název upravované tabulky, výčet voleb tabulky je stejný jako u CREATE TABLE, více viz níže
.
PříkazPopis
ALTER TABLE Jmeno_tabulky ADDpřidává nový sloupec, případně index do tabulky
Syntaxe
ALTER TABLE Jmeno_tabulky ADD Jmeno_sloupce typsloupce volbysloupce FIRST | AFTER Jmeno_sloupce2;
Vysvětlení částí příkazu
za příkaz ALTER TABLE dáme jméno tabulky

pak uvedeme název nového sloupce

typ sloupce (varchar(10),text)

Můžeme specifikovat umístnění vzhledem k ostatním sloupcům
defaultně (bez volby) --- se vloží na poslední místo
FIRST --- se vloží na první místo
AFTER Jmeno_sloupce2 --- se vloží za sloupec Jmeno_sloupce2
PříkladyPopis příkladu
ALTER TABLE Jmeno_tabulky ADD (nick varchar(20));přidá na konec sloupec nick s typem varchar(20)
ALTER TABLE Jmeno_tabulky ADD (rok date) FIRST; přidá na začátek sloupec rok s typem date
ALTER TABLE Jmeno_tabulky ADD (razitko timestamp) AFTER rok; přidá za sloupec rok sloupec razitko s typem timestamp
ALTER TABLE Jmeno_tabulky ADD PRIMARY KEY (Jmeno_sloupce); přidá primary key sloupci Jmeno_sloupce v tabulce Jmeno_tabulky
ALTER TABLE Jmeno_tabulky ADD Jmeno_sloupce INT NOT NULL PRIMARY KEY AUTO_INCREMENT; přidá primary key s auto inkrementací sloupci Jmeno_sloupce v tabulce Jmeno_tabulky
ALTER TABLE Jmeno_tabulky ADD INDEX [Nazev_indexu](Jmeno_sloupce);přidá index Nazev_indexu sloupci Jmeno_sloupce v tabulce Jmeno_tabulky
ALTER TABLE Jmeno_tabulky ADD UNIQUE [Nazev_indexu](Jmeno_sloupce); vytvoří unikátní index Nazev_indexu sloupci Jmeno_sloupce v tabulce Jmeno_tabulky. Může být více jedinečných klíčů,ale nesmí být v indexovaných položkách duplicity.
ALTER TABLE Jmeno_tabulky ADD FULLTEXT [Nazev_indexu](Jmeno_sloupce);vytvoří fultextový index Nazev_indexu sloupci Jmeno_sloupce v tabulce Jmeno_tabulky.Fulltextový klíč se smí vytvářet pouze ze sloupců typu VARCHAR a TEXT
ALTER TABLE Jmeno_tabulky ADD SPATIAL INDEX nazevindexu (sloupceindexu);
ALTER TABLE Jmeno_tabulky ADD FOREIGN KEY [Nazev_indexu](Jmeno_sloupce) REFERENCES Jmeno_tabulky2 (Jmeno_sloupce2);vytvoří propojení mezi tabulkami a sloupci
.
PříkazPopis
ALTER TABLE Jmeno_tabulky CHANGE mění název sloupce, datový typ, nebo volby sloupce
Syntaxe
ALTER TABLE Jmeno_tabulky CHANGE Stare_jmeno_sloupce Nove_jmeno_sloupce typsloupce [volbysloupce];
Vysvětlení částí příkazu
za příkaz ALTER TABLE dáme jméno tabulky

pak uvedeme název starého sloupce, pak název nového sloupce, typ sloupce (varchar(10),text)
PříkladyPopis příkladu
ALTER TABLE prvni CHANGE nick prezdivka varchar(20);změní název sloupce nick na přezdívka s typem varchar(20)
ALTER TABLE prvni CHANGE razitko razitko timestamp;změní typ sloupce třeba z time na timestamp při zachování stejného jména.
.
PříkazPopis
ALTER TABLE Jmeno_tabulky DROPodstranuje sloupce,indexy, primární klíče a cizí klíče
Syntaxe
ALTER TABLE Jmeno_tabulky DROP Jmeno_sloupce;
Vysvětlení částí příkazu
za příkaz ALTER TABLE dáme jméno tabulky

pak uvedeme co chceme odstranit
PříkladyPopis příkladu
ALTER TABLE Jmeno_tabulky DROP Jmeno_sloupce;odstraní sloupec Jmeno_sloupce
ALTER TABLE Jmeno_tabulky DROP INDEX nazevindexu;odstraní index nazevindexu
ALTER TABLE Jmeno_tabulky DROP PRIMARY KEY;odstraní primární klíč
ALTER TABLE Jmeno_tabulky DROP FOREIGN KEY jmeno_ciziho_klice;odstraní cizí klíč
.
PříkazPopis
ALTER TABLE Jmeno_tabulky CONVERT TO CHARACTER SET změní znakovou sadu
Syntaxe
ALTER TABLE Jmeno_tabulky CONVERT TO CHARACTER SET Znak_sada COLLATE nazev_razeni;
Vysvětlení částí příkazu
za příkaz ALTER TABLE dáme jméno tabulky

pak uvedeme za CONVERT TO CHARACTER SET znakovou sadu

a případně i volitelné COLLATE za který uvedeme název řazení

POZOR je li sloupec indexován, musí se nejdříve index zakázat a pak po provedení změn zase povolit
PříkladyPopis příkladu
ALTER TABLE Jmeno_tabulky CONVERT TO CHARACTER SET cp1250;změní znakovou sadu na cp1250
.
PříkazPopis
ALTER TABLE Jmeno_tabulky ENGINE změna typu tabulky
Syntaxe
ALTER TABLE Jmeno_tabulky ENGINE Typ;
Vysvětlení částí příkazu
změna typu tabulky (MyISAM,InnoDB). Změna MyISAM na InnoDB se nepovede, pokud MyISAM obsahují fulltextový index, nebo geometrická data
PříkladyPopis příkladu
ALTER TABLE Jmeno_tabulky ENGINE InnoDBzmění typ tabulky na InnoDB
.
PříkazPopis
ALTER TABLE Jmeno_tabulky MODIFY COLUMNpřesune v tabulce sloupec na jiné místo
Syntaxe
ALTER TABLE Jmeno_tabulky MODIFY COLUMN Sloupec5 smallint AFTER Sloupec1 | FIRST;
Vysvětlení částí příkazu
za příkaz ALTER TABLE dáme jméno tabulky

pak uvedeme za MODIFY COLUMN sloupec, který chceme přesunout a typ sloupce (varchar(10),text)

nakonec uvedeme kam jej přesuneme

Můžeme specifikovat umístnění vzhledem k ostatním sloupcům,
FIRST --- se vloží na první místo
AFTER Jmeno_sloupce2 --- se vloží za sloupec Jmeno_sloupce2
PříkladyPopis příkladu
ALTER TABLE Jmeno_tabulky MODIFY COLUMN Sloupec5 smallint AFTER Sloupec1; přesune v tabulce sloupec Sloupec5 typu smallint za Sloupec1
.
PříkazPopis
DROP TABLE smaže tabulku
Syntaxe
DROP [TEMPORARY] TABLE [IF EXIST] Jmeno_tabulky, Jmeno_tabulky2;
Vysvětlení částí příkazu
za příkaz DROP volitelně uvádíme pro dočasné tabulky TEMPORARY

za příkaz TABLE volitelně uvádíme IF EXIST (příkaz neskončí chybou pokud tabulka neexistuje)

pak uvedeme jména mazaných tabulek (tabulky
PříkladyPopis příkladu
DROP TABLE Jmeno_tabulky; smaže tabulku Jmeno_tabulky
.
PříkazPopis
SHOW TABLES zobrazí tabulky v DB
Syntaxe
SHOW TABLES [FROM JmenoDB] [LIKE vzor];
Vysvětlení částí příkazu
za příkaz SHOW TABLES můžeme volitelně uvést jinou DB než aktuální a příkazem LIKE vyfiltrovat výběr
PříkladyPopis příkladu
SHOW TABLES ; zobrazí tabulky v aktuální DB
SHOW TABLES [FROM JmenoDB] [LIKE 't%']; zobrazí tabulky v DB JmenoDB začínající na t
.
PříkazPopis
SHOW TABLE TYPES zobrazí seznam všech dostupných typů tabulek (MYISAM, Inno DB atd)
Syntaxe
SHOW TABLE TYPES;
.
PříkazPopis
SHOW TABLE STATUS zobrazí vlastnosti aktuální, nebo vybrané DB
Syntaxe
SHOW TABLE STATUS [FROM JmenoDB] [LIKE vzor];
Vysvětlení částí příkazu
za příkaz SHOW TABLE STATUS můžeme volitelně uvést jinou DB než aktuální a příkazem LIKE vyfiltrovat výběr
.
PříkazPopis
RENAME TABLE přejmenovává tabulky
Syntaxe
RENAME TABLE Stary_nazev TO Novy_nazev;
Vysvětlení částí příkazu
za příkaz RENAME TABLE uvedeme jméno tabulky , kterou chceme přejmenovat

za příkaz TO uvedeme nové jméno tabulky
PříkladyPopis příkladu
RENAME TABLE prvni TO druha; přejmenuje dabulku "prvni" na "druha"
.
PříkazPopis
ANALYZE TABLEprovede analýzu indexových hodnot sloupce
Syntaxe
ANALYZE TABLE jmeno_tabulky;
.
PříkazPopis
CHECK TABLEprověří integritu databázového souboru pro zadanou tabulku. Chyby nejsou opraveny.
Syntaxe
CHECK TABLE jmeno_tabulky;
.
PříkazPopis
FLUSH TABLESzavře všechny vyjmenované tabulky
Syntaxe
FLUSH TABLES jmeno_tabulky;
.
PříkazPopis
LOCK TABLEzabranuje jiným uživatelům MYSQL číst/zapisovat zadané tabulky, dokud není zámek uvolněn. Používat jen s stabulkami MYISAM. Většinou se používá při použití příkazu SELECT a následné úpravě příkazem UPDATE. Po uzamknutí mají právo čtení, nebo zápisu v tabulce pouze ty příkazy, které se nachází mezi LOCK ... UNLOCK
Syntaxe
LOCK TABLES nazev_tabulky typ_zamku;
Vysvětlení částí příkazu
Typy zámků
READ všichni oprávnění uživatelé mohou číst tabulku, ale nikdo ji nemůže upravovat
READ LOCAL stejné jako READ, ale jsou povoleny příkazy INSERT, jestliže nemění data existujících záznamů
WRITE aktuální uživatel může číst i měnit data. Zámek je aplikován jen tehdy, jestliže není tabulka již uzamčena READ nebo WRITE. Dokud není tento zámek uvolněn, není na něj možno aplikovat jiný zámek
LOW PRIORITY WRITE stejné jako write, ale ostatní uživatelé moho aplikovat zámek READ
PříkladyPopis příkladu
LOCK TABLES nazev_tabulky READ;uzamkne tabulku nazev_tabulky zamkem read
.
PříkazPopis
OPTIMIZE TABLEodstranuje nepoužívaná místa z tabulkových souborů. U DB , kde se často updatují a mažou data by se měl pouštět pravidelně, protože zrychluje práci
Syntaxe
OPTIMIZE TABLE nazev_tabulky;
.
PříkazPopis
UNLOCK TABLESodemkne všechny tabulky všech databází.
Syntaxe
UNLOCK TABLES;
.
PříkazPopis
SHOW COLUMNS FROM zobrazí informace o všech sloupcích v tabulce
Syntaxe
SHOW [FULL] COLUMNS FROM Jmeno_tabulky [FROM nazevDB] [LIKE vzor] ;
Vysvětlení částí příkazu
za příkaz SHOW můžeme volitelně uvést příkaz FULL, který zobrazí podrobnější informace

za příkaz COLUMNS FROM uvedeme jméno tabulky

následně můžeme vybrat jinou DB než aktuální a příkazem LIKE vyfiltrovat výběr
PříkladyPopis příkladu
SHOW COLUMNS FROM Jmeno_tabulky;zobrazí sloupce v tabulce Jmeno_tabulky
.
PříkazPopis
SHOW INDEX FROM zobrazí indexy sloupců
Syntaxe
SHOW INDEX FROM Jmeno_tabulky;
Vysvětlení částí příkazu
za příkaz SHOW INDEX FROM uvádíme jméno tabulky ve které chceme zobrazit indexy
PříkladyPopis příkladu
SHOW INDEX FROM Jmeno_tabulky; zobrazí indexy sloupců v tabulce Jmeno_tabulky
.
PříkazPopis
DROP INDEX vymaže index
Syntaxe
DROP INDEX nazev_indexu ON Jmeno_tabulky;
Vysvětlení částí příkazu
za příkaz DROP INDEX uvedeme název indexu (zpravidla název sloupce, pro primární index použijeme volbu PRIMARY)

za příkaz ON uvedeme jméno tabulky
.



Změny dat v tabulce
PříkazPopis
INSERT Vkládá data do tabulek-jsou 3 varianty příkazu
Syntaxe
INSERT INTO Jmeno_tabulky (Sloupec1, Sloupec2) VALUES ('Hodnota1', 'Hodnota2'), ('Hodnota3', 'Hodnota4');
Vysvětlení částí příkazu
za příkaz INTO vkládáme jméno tabulky (tabulek)

za příkaz VALUES vkládáme hodnotu (hodnoty)

Názvy sloupců se mohou vynechávat, ale pak se musíme vkládat všechny hodnoty ve správném pořadí

(třeba prázdné '').POZOR-Textové řetězce musíme ukládat mezi '', jinak mysql bude hlásit error.
PříkladyPopis příkladu
INSERT INTO Jmeno_tabulky (Sloupec1, Sloupec2) VALUES ('Hodnota1', 'Hodnota2'), ('Hodnota3', 'Hodnota4'); vloží do tabulky Jmeno_tabulky, do Sloupec1 hodnotu Hodnota1 a Hodnota3 a do Sloupec2 hodnotu Hodnota2 a Hodnota4.
PříkladyPopis příkladu
INSERT INTO Jmeno_tabulky (Sloupec1) VALUES ('Hodnota1'), ('Hodnota2'), ('Hodnota3'), ('Hodnota4'); vloží do tabulky Jmeno_tabulky, do Sloupec1 hodnotu Hodnota1 až Hodnota4
Syntaxe
INSERT INTO Jmeno_tabulky SET Sloupec1='Hodnota1', Sloupec2='Hodnota2';
Vysvětlení částí příkazu
Textové řetězce musíme ukládat mezi '', za SET se použije syntaxe sloupec=hodnota. Nechá se vložit pouze jediný záznam.
PříkladyPopis příkladu
INSERT INTO Jmeno_tabulky SET Sloupec1='Hodnota1', Sloupec2='Hodnota2'; vloží do tabulky Jmeno_tabulky, do Sloupec1 hodnotu Hodnota1 a do Sloupec2 Hodnota2
Syntaxe
INSERT INTO Jmeno_tabulky SELECT ......;
Vysvětlení částí příkazu
vloží do tabulky Jmeno_tabulky data vybraná příkazem select
.
PříkazPopis
UPDATE mění obsah hodnot sloupců
Syntaxe
UPDATE Jmeno_tabulky SET Sloupec1='Hodnota1' WHERE Sloupec3='Hodnota3' [ORDER BY jmeno_sloupce] [LIMIT cislo];
Vysvětlení částí příkazu
za příkaz SET se vkládá sloupec ve kterém se má měnit hodnota

za příkaz WHERE se vkládá klíč, podle kterého se identifikuje místo vkládání.Bez uvedení podmínky se změní obsah všech řádků v sloupci

volitelné-za příkaz ORDER BY se uvede jméno sloupce, podle kterého se řadí záznamy.Vzestupně bez parametru, pro sestupné s volbou DESC

volitelné-za příkaz LIMIT se uvede počet měněných záznamů (prvních, nebo posledních x záznamů, podle toho jaké jsme použili řazení)
PříkladyPopis příkladu
UPDATE Jmeno_tabulky SET Sloupec1='Hodnota1' WHERE Sloupec3='Hodnota3';najde sloupec Sloupec3, v něm hodnotu Hodnota3, na teto radce ve sloupci Sloupec1 změní stávající hodnotu na Hodnota1 . Pokud neuvedeme podmínku WHERE,změní se všechny hodnoty ve sloupci Sloupec1 na Hodnota1. Jestliže je hodnota Hodnota3 v tabulce vícekrát, tak se změna provede u všech výskytů. POZOR-Textové řetězce musíme ukládat mezi '', jinak mysql bude hlásit error.
UPDATE Jmeno_tabulky SET Sloupec1=Sloupec1*1.5; vynásobí všem hodnotu ve sloupci Sloupec1 1,5krát
.
PříkazPopis
DELETE vymaže vybrané záznamy Jmeno_tabulky
Syntaxe
DELETE [volby_mazani] FROM Jmeno_tabulky WHERE podminka [ORDER BY jmeno_sloupce] [LIMIT cislo];
Vysvětlení částí příkazu
za příkaz FROM vkládáme jméno tabulky (tabulek)

za příkaz WHERE se vkládá klíč, podle kterého se identifikuje místo mazání.Bez uvedení podmínky se smaže obsah všech řádků v sloupci

volitelné-za příkaz ORDER BY se uvede jméno sloupce, podle kterého se řadí záznamy.Vzestupně bez parametru, pro sestupné s volbou DESC

volitelné-za příkaz LIMIT se uvede počet měněných záznamů (prvních, nebo posledních x záznamů, podle toho jaké jsme použili řazení
PříkladyPopis příkladu
DELETE FROM Jmeno_tabulky WHERE Sloupec1='Hodnota1'; vymaže cekou řádku podle hodnoty Hodnota1 ze sloupce Sloupec1
DELETE FROM Jmeno_tabulky WHERE Sloupec1='Hodnota1' ORDER BY Sloupec2 LIMIT 10 ; navíc seřadí výsledky podle sloupce Sloupec2 a smaže jen 10 záznamů. Podle toho jak jsme seřadili výběr podmínkou ORDER BY, nebo ORDER BY DESC
.
PříkazPopis
SELECT hledání (výběr) dat v tabulkách
Syntaxe
SELECT [volbyselectu] Jmeno_sloupce [AS alias] FROM seznam_tabulek [WHERE podminka] [GROUP BY podminka] [HAVING podminka] [ORDER BY jmeno_sloupce] [LIMIT cislo];
Vysvětlení částí příkazu
za příkaz SELECT uvádíme název sloupce, který chceme prohledat. Znak * znamená všechny sloupce.

volitelné-volby selectu DISTINCT-duplicity budou zobrazeny jen jednou,ALL duplicity budou zobrazeny pokaždé

volitelné-za příkaz AS vložíme název sloupce na který se dočasně přejmenují výsledky-je to prostě alias

za příkaz FROM vkládáme jméno tabulky (tabulek)

volitelné-za příkaz WHERE se vkládá klíč, podle kterého se identifikuje místo hledání

volitelné-za příkaz GROUP BY se uvádí sloupce, podle kterých je dotaz seřazen

volitelné-za příkaz HAVING se vkládá klíč, podle kterého se identifikuje místo hledání

volitelné-za příkaz ORDER BY se vkládá název sloupce podle kterého se řadí výsledky a způsob řazení výsledků. Vzestupně Je bez podmínky , sestupně použijeme ještě podmínku DESC (ORDER BY DESC)

volitelné-za příkaz LIMIT uvádíme (volitelně) kolik řádků máme vynechat a následující číslo ukáže daný počet výsledků. LIMIT 5, 10; ve výsledcích vynechá prvních 5 výsledků a zobrazí následujících 10, ty co jsou za tím už nezobrazí.
PříkladyPopis příkladu
SELECT * FROM Jmeno_tabulky; zobrazí vše z tabulky Jmeno_tabulky
SELECT Sloupec1 FROM Jmeno_tabulky; zobrazí obsah sloupce Sloupec1 z tabulky Jmeno_tabulky
SELECT * FROM Jmeno_tabulky WHERE Sloupec1='Hodnota1; zobrazí celou řádku z tabulky Jmeno_tabulky,která odpovídá hodnotě Hodnota1 ve sloupci Sloupec1
SELECT Sloupec2 FROM Jmeno_tabulky WHERE Sloupec1='Hodnota1'; zobrazí obsah sloupce Sloupec2 z tabulky Jmeno_tabulky,který odpovídá záznamu Hodnota1 ve sloupci Sloupec1
POZOR-pokud vybíráme hodnoty odpovídající NULL , použijeme podmínku Sloupec1=IS NULL
SELECT Sloupec1, Sloupec2 FROM Jmeno_tabulky WHERE Sloupec1 IN ('Hodnota1', 'Hodnota2'); stejné jako předtím, ale vybíráme 2 sloupce podle sloupce Sloupec1 a v něm obsažených hodnot Hodnota1 a Hodnota2
SELECT Sloupec3, Sloupec4 FROM Jmeno_tabulky WHERE Sloupec1='Hodnota1' AND Sloupec2='Hodnota2'; vybíráme 2 sloupce (Sloupec3 a Sloupec4) podle sloupce Sloupec1 který obsahuje obsažené hodnotu Hodnota1 a zároven musí Sloupec2 obsahovat hodnotu Hodnota2
SELECT Sloupec2 FROM Jmeno_tabulky WHERE Sloupec1='Hodnota1'
UNION ALL
SELECT Sloupec2 FROM Jmeno_tabulky WHERE Sloupec1='Hodnota2';
spojuje výsledky z různých sloupců.Podmínka ALL zobrazí i duplicitní hodnoty, jinak se každá hodnota zobrazí jen jednou.
SELECT Sloupec2 FROM Jmeno_tabulky WHERE Sloupec1 LIKE 'Hodnota1'; vybere hodnoty ze sloupce Sloupec2, podle sloupce Sloupec1, kterému odpovídá maska Hodnota1
% odpovídá libovolnému počtu libovolných znaků
_ odpovídá jednomu libovolnému znaku
Pokud se tento znak nachází ve vyhledávaném textu, chráníme jej lomítkem \ např \%, \_
SELECT COUNT(Sloupec1) from Jmeno_tabulky; zobrazí počet záznamů z tabulky Jmeno_tabulky
SELECT COUNT(DISTINCT Sloupec1) from Jmeno_tabulky; zobrazí počet unikátních (nepočítá výcenásobné výskyty) záznamů z tabulky Jmeno_tabulky
SELECT Sloupec1 FROM Jmeno_tabulky LIMIT 2, 3; přeskočí první 2 položky a zobrazí následující 3 položky. Pokud s neuvede čárka a druhé číslo, zobrazí první 2 položky
SELECT FOUND_ROWS(); po předcházejícím dotazu řekne, kolik záznamů NEzobrazil.
SELECT SQL_CALC_FOUND_ROWS Sloupec1 FROM Jmeno_tabulky LIMIT 3; stejné jako bez SQL_CALC_FOUND_ROWS. Ale pokud následuje příkaz SELECT FOUND_ROWS(); , tak vypíše kolik záznamů by našel pokud by nebyl omezem filtrem limit
SELECT * FROM Jmeno_tabulky ORDER BY Sloupec1; zobrazí a seřadí vzestupně podle sloupce Sloupec1 vše z tabulky Jmeno_tabulky
SELECT * FROM Jmeno_tabulky ORDER BY(nazev='1000') DESC,(nazev='500') DESC, nazev Sloupec1; zobrazí a seřadí sestupně. Nejprve vybere hodnotu 1000, pak 500 a nakonec všechny ostatní podle sloupce Sloupec1 vše z tabulky Jmeno_tabulky
SELECT * FROM Jmeno_tabulky ORDER BY Sloupec1 DESC;stejné jako předcházející jenje řazení sestupně
SELECT * FROM Jmeno_tabulky COLLATE latin_german_ci; zobrazí vše z tabulky Jmeno_tabulky a použije řazení podle německé znakové sady
.
PříkazPopis
TRUNCATE TABLE vymaže všechny data v tabulce
Syntaxe
TRUNCATE TABLE Jmeno_tabulky;
Vysvětlení částí příkazu
Oproti DELTE bez podmínky WHERE je rychlejší, protože nemaže záznamy v tabulce, ale smaže celou tabulku a vytvoří novou stejného jména za příkaz TRUNCATE TABLE uvedeme název mazané tabulky vymaže veškerá data z tabulky Jmeno_tabulky
.
PříkazPopis
LOAD DATA načte textový soubor a vloží data v něm obsažená do tabulky
Syntaxe
LOAD DATA [volby_load] INFILE 'nazev_souboru' [volby_dupl] INNTO TABLE [volby_importu] [IGNORE cislo LINES] [seznam_sloupcu];
Vysvětlení částí příkazu
za příkaz LOAD DATA uvádíme volby umístnění importovaného souboru. Bez volby hledá v adresáři aktuální DB, s volbou LOCAL hledá soubor v pracovním adresáři stroje z něhož je spuštěný příkaz

za příkaz INFILE uvádíme název importovaného souboru. Je možno použít absolutní cestu. Relativní cesta se nastaví vůči datovému adresáři.

Můžeme ještě za název souboru uvést volby jak se chovat při nelezení duplicit- IGNORE (zachová stávající záznam), nebo REPLACE (přepíše stávající záznam) které řídí přepsání stejných hodnot ve sloupcích s indexem PRIMARY KEY (UNIQUE)

za příkaz INNTO TABLE uvádíme název tabulky do které se data importují. Za název uvádíme volby importu, která udávají formát dat.
TERMINTED BY 'konecsloupce' --- oddělovač sloupců (default \t)
ENCLOSED BY 'uzavrenedo' --- znak ve kterém jsou hodnoty uzavřené (default '')
ESCAPED BY 'ridiciznak' --- zneplatnuje spec. znaky vyskytující se v hodnotách (default \\)
LINES TERMINATED BY 'konecradku' --- (default \n)

Zkratky znaků
\0 nulbajt
\b bakspace
\n nový řádek
\r znak CR
\s mezera
\t tabelátor
\' apostrof
\" uvozovky
\\ zpětné lomítko

volitelné-mezi příkazy IGNORE cislo LINES -vložíme číslo, které udává kolik řádku na začátku se má vynechat (záhlaví sloupců)

seznam sloupců- na konec uvedeme seznam sloupců v souboru, pokud neodpovídají sloupcům v tabulce.
PříkladyPopis příkladu
LOAD DATA local INFILE 'mydir/soubor.txt' INTO TABLE Tabulka1 IGNORE 5 LINES; Natáhne data z klientského stroje, z adresáře pracovni_adresar/mydir/soubor.txt do tabulky Tabulka1 s defaultními oddělovači a ostatními znaky a vynechá 5 řádek ze začátku
.




Funkce a operátory


Funkce jsou předpřipravené akce. Operátory jsou znaky/slova která pomáhají upřesnovat dotazy

Funkce pro práci s textem


Pro příklady jsem vytvořil tabulku a do ní vložil hodnoty.
jméno tabulky je lidi
ve sloupci jmeno je hodnota Jaroslav,
ve sloupci prijmeni je hodnota Votruba,

FunkcePopis
CONCAT spojuje textové řetězce z vybraných sloupců(řetězců) těsně za sebou
Syntaxe
SELECT CONCAT(sloupec1, sloupec2) FROM tabulka1;
Vysvětlení částí příkazu
za příkaz SELECT CONCAT uvedeme do závorky vyjmenované sloupce(řetězce) které spojujeme
PříkladyVýsledek
SELECT CONCAT(jmeno, prijmeni) FROM lidi; JaroslavVotruba
SELECT CONCAT(jmeno, "KING") FROM lidi; from lidi;; JaroslavKING
.
FunkcePopis
CONCAT_WS spojuje sloupce(textové řetězce) z vybraných sloupců, které oddělí specifikovaným oddělovačem
Syntaxe
SELECT CONCAT_WS('oddelovac', sloupec1, sloupec2) FROM tabulka1;
Vysvětlení částí příkazu
za příkaz SELECT CONCAT uvedeme do závorky nejdříve oddělovač a pak vyjmenované sloupce(řetězce)
PříkladyVýsledek
SELECT CONCAT_WS(' ', jmeno, prijmeni) from lidi; Jaroslav Votruba
SELECT CONCAT_WS(' ', jmeno, "KING") from lidi; Jaroslav KING
.
FunkcePopis
LCASE nebo LOWERpřevede velká písmena na malá (je možné použít oba příkazy, dělají to samé)
Syntaxe
SELECT LCASE(sloupec) FROM tabulka1;
Vysvětlení částí příkazu
za příkaz SELECT LCASE uvedeme do závorky sloupec (řetězec)
PříkladyVýsledek
SELECT LCASE(jmeno) FROM lidi; jaroslav
.
FunkcePopis
UCASE nebo UPPER převede malá písmena na velká (je možné použít oba příkazy, dělají to samé)
Syntaxe
SELECT UCASE(sloupec) FROM tabulka1;
Vysvětlení částí příkazu
za příkaz SELECT UCASE uvedeme do závorky sloupec (řetězec)
PříkladyVýsledek
SELECT UCASE(jmeno) FROM lidi; JAROSLAV
.
FunkcePopis
LPAD vyplní výsledek na požadovanou délku vybranými znaky, které vloží před hodnoty
Syntaxe
SELECT LPAD(sloupec, číslo, 'znak') FROM tabulka1;
Vysvětlení částí příkazu
za příkaz SELECT LPAD uvedeme do závorky nejdříve sloupce, konečnou délku řetězce a nakonec znak který budeme doplnovat
PříkladyVýsledek
SELECT LPAD(jmeno, 20, '*') FROM lidi;************Jaroslav
.
FunkcePopis
RPAD vyplní výsledek na požadovanou délku vybranými znaky, které vloží za hodnoty
Syntaxe
SELECT RPAD(sloupec, číslo, 'znak') FROM tabulka1;C
Vysvětlení částí příkazu
za příkaz SELECT RPAD uvedeme do závorky nejdříve sloupce, konečnou délku řetězce a nakonec znak který budeme doplnovat
PříkladyVýsledek
SELECT RPAD(jmeno, 20, '*') FROM lidi; výsledek Jaroslav************
.
FunkcePopis
QUOTE vloží výsledek do apostrofů. Pokud řetězec obsahuje ' nebo " doplní jej o /
Syntaxe
SELECT QUOTE(sloupec) FROM tabulka1;
Vysvětlení částí příkazu
za příkaz SELECT QUOTE uvedeme do závorky sloupec
PříkladyVýsledek
SELECT QUOTE(jmeno) FROM lidi; 'Jaroslav'
.
FunkcePopis
REPEAT výběr ze sloupce opakuje x-krát za sebou
Syntaxe
SELECT REPEAT(sloupec, číslo) FROM tabulka1;
Vysvětlení částí příkazu
za příkaz SELECT REPEAT uvedeme do závorky sloupec a číslo kolikrát se má výsledek opakovat
PříkladyVýsledek
SELECT REPEAT(jmeno, 3) FROM lidi; JaroslavJaroslavJaroslav
.
FunkcePopis
REPLACE zamění ve výběru jeden řetězec jiným
Syntaxe
SELECT REPLACE(sloupec, 'hledaná_hodnota', 'zamění_za') FROM lidi;
Vysvětlení částí příkazu
za příkaz SELECT REPLACE uvedeme do závorky sloupec, hledaný výraz a nakonec hodnotu, která se vloží místo hledaného výrazu
PříkladyVýsledek
SELECT REPLACE(jmeno, 'r', 'KING') FROM lidi; JaKINGoslav
SELECT REPLACE(jmeno, 'r', prijmeni) FROM lidi; JaVotrubaoslav
.
FunkcePopis
INSERT vloží řetězec od daného místa
Syntaxe
SELECT INSERT(sloupec1, x, y, 'timto nahradi') FROM lidi;
Vysvětlení částí příkazu
ve sloupci1 začne na x-tém místě a skončí po dalších y znacích, mezi tyto znaky vloží výraz timto nahradi
PříkladyVýsledek
SELECT INSERT(jmeno, 3, 2, 'KING') FROM lidi; JaKINGslav
SELECT insert(jmeno, 3, 3, 'KING') FROM lidi; JaKINGlav
SELECT insert(jmeno, 3, 3, prijmeni) FROM lidi; JaVotrubalav
.
FunkcePopis
REVERSE obrátí pořadí vybíraných hodnot
Syntaxe
SELECT REVERSE(sloupec) FROM tabulka1;
Vysvětlení částí příkazu
za příkaz SELECT REVERSE uvedeme do závorky sloupec
PříkladyVýsledek
SELECT REVERSE(jmeno) FROM lidi; valsoraJ
.
FunkcePopis
LTRIM odřízne mezery na začátku řetězce, pokud se tam vyskytují
Syntaxe
SELECT LTRIM(sloupec) FROM tabulka1;
Vysvětlení částí příkazu
za příkaz SELECT LTRIM uvedeme do závorky sloupec
PříkladyVýsledek
SELECT LTRIM(jmeno) FROM lidi; pokud by bylo v tabulce " Jaroslav", ořízlo by to výsledek na Jaroslav
.
FunkcePopis
RTRIM odřízne mezery na konci řetězce, pokud se tam vyskytují
Syntaxe
SELECT RTRIM(sloupec) FROM tabulka1;
Vysvětlení částí příkazu
za příkaz SELECT RTRIM uvedeme do závorky sloupec
PříkladyVýsledek
SELECT RTRIM(jmeno) FROM lidi; pokud by bylo v tabulce "Jaroslav ", ořízlo by to výsledek na Jaroslav
.
FunkcePopis
TRIM odřízne mezery na začátku i konci řetězce, pokud se tam vyskytují
Syntaxe
SELECT RTRIM(sloupec) FROM tabulka1;
Vysvětlení částí příkazu
za příkaz SELECT RTRIM uvedeme do závorky sloupec
PříkladyVýsledek
SELECT TRIM(jmeno) FROM lidi; pokud by bylo v tabulce " Jaroslav ", ořízlo by to výsledek na Jaroslav
.
FunkcePopis
SPACE výsledkem je zadaný počet mezer
Syntaxe
SELECT SPACE(číslo);
Vysvětlení částí příkazu
za příkaz SELECT SPACE uvedeme do závorky, kolik mezer má vygenerovat
PříkladyVýsledek
SELECT SPACE(10); vypíše 10 mezer
.
FunkcePopis
SUBSTR vynechá z vybraného sloupce x-znaků a zobrazí následujících n-znaků
Syntaxe
SELECT SUBSTR(sloupec, kolik_vynechat, kolik_zobrazit) FROM tabulka1;
Vysvětlení částí příkazu
za příkaz SELECT SUBSTR uvedeme do závorky sloupec, pak kolik znaků se má vynechat a nakonec kolik se jich má následně zobrazit
PříkladyVýsledek
SELECT SUBSTR(jmeno, 2, 3) FROM lidi; Příkaz vezme znaky následují 3znaky po 2 znaku . Výsledek ros
.
FunkcePopis
RIGHT zobrazí posledních x-znaků
Syntaxe
SELECT RIGHT(sloupec, číslo) FROM lidi;
Vysvětlení částí příkazu
za příkaz SELECT RIGHT do závorky sloupec, pak kolik znaků se má zobrazit
PříkladyVýsledek
SELECT RIGHT(jmeno, 3) FROM lidi; Příkaz vezme skupinu posledních 3 znaků. Výsledek lav
.
FunkcePopis
LEFT zobrazí prvních x-znaků
Syntaxe
SELECT LEFT(sloupec, číslo) FROM lidi;
Vysvětlení částí příkazu
za příkaz SELECT RIGHT do závorky sloupec, pak kolik znaků se má zobrazit
PříkladyVýsledek
SELECT LEFT(jmeno, 3) FROM lidi; Příkaz vezme skupinu prvních 3 znaků. Výsledek Jar
.



Funkce pro práci s datem a časy


Vytvořil jsem v tabulce lidi sloupec s názvem razítko. Formát sloupce je timestamp
příklad hodnoty - 2009-02-23 09:22:26


Místo názvů sloupců se mohou používat aktuální hodnoty data a času
now() zobrazí aktuální datum a čas
2009-03-11 13:04:36
curdate() zobrazí aktuální datum
2009-03-11
curtime() zobrazí aktuální čas
13:04:36
tyto hodnoty můžeme použít i samostatně-viz níže


2009-09-07 je 250 den roku 200920:09:20
FunkcePopis
NOW vypíše aktuální datum a čas
Syntaxe
SELECT NOW();
SELECT HOUR(NOW());
Vysvětlení částí příkazu
za příkaz se vloží prázdné závorky
pokud za závorkami uvedeme hodnotu +0, výsledek bude neformátované složené číslo
za příkaz SELECT můžeme uvést následující hodnoty a vyfiltrovat tak hodnotu, kterou potřebujeme
YEAR
MONTH
WEEK . Pokud neurčíme u funkce WEEK druhý argument, bude považována neděle za první den týdne SELECT week(NOW(),1);
DAY
HOUR
MINUTE
SECOND
PříkladyVýsledek
SELECT NOW(); 2009-03-11 13:04:36
SELECT NOW()+0; 20090223112051.000000
.
FunkcePopis
CURDATE; vypíše aktuální datum
Syntaxe
SELECT CURDATE();
Vysvětlení částí příkazu
za příkaz se vloží prázdné závorky
PříkladyVýsledek
SELECT CURDATE(); 2009-03-09
.
FunkcePopis
CURTIME vypíše aktuální čas
Syntaxe
SELECT CURTIME();
Vysvětlení částí příkazu
za příkaz se vloží prázdné závorky
PříkladyVýsledek
SELECT CURTIME(); 12:36:32
.
FunkcePopis
UTC_DATE vrací výsledek v světovém koordinovaném času(u nás je +1h oproti UTC)
Syntaxe
SELECT UTC_DATE();
Vysvětlení částí příkazu
za příkaz se vloží prázdné závorky
PříkladyVýsledek
SELECT UTC_DATE(); 2009-03-09
.
FunkcePopis
UTC_TIME vrací výsledek v světovém koordinovaném času(u nás je +1h oproti UTC)
Syntaxe
SELECT UTC_TIME();
Vysvětlení částí příkazu
za příkaz se vloží prázdné závorky
PříkladyVýsledek
SELECT UTC_TIME(); 11:36:32
.
FunkcePopis
DATE vyřízne z datetime pouze datum
Syntaxe
SELECT DATE(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT DATE(razitko) FROM lidi; 2009-02-23
SELECT DATE(curdate()); 2009-03-11
.
FunkcePopis
YEAR vyřízne z datetime pouze rok
Syntaxe
SELECT YEAR(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT YEAR(razitko) FROM lidi; 2009
.
FunkcePopis
QAURTER vyřízne z datetime pouze čtvrtletí
Syntaxe
SELECT QAURTER(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT QUARTER(razitko) FROM lidi; 1
.
FunkcePopis
MONTH vyřízne z datetime pouze měsíc
Syntaxe
SELECT MONTH(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT MONTH(razitko) FROM lidi; 2
.
FunkcePopis
MONTH vyřízne z datetime pouze měsíc
Syntaxe
SELECT MONTH(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT MONTH(razitko) FROM lidi; 2
.
FunkcePopis
MONTHNAME vyřízne z datetime pouze název měsíce
Syntaxe
SELECT MONTHNAME(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT MONTHNAME(razitko) FROM lidi; February
.
FunkcePopis
WEEK vyřízne z datetime pouze číslo týdne
Syntaxe
SELECT WEEK(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT WEEK(razitko) FROM lidi; 8
.
FunkcePopis
WEEKDAY vyřízne z datetime pouze číslo dne v týdnu, pondělí=0
Syntaxe
SELECT WEEKDAY(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT WEEKDAY(razitko) FROM lidi; 0
.
FunkcePopis
DAYOFMONTH vyřízne z datetime pouze číslo dne v měsíci
Syntaxe
SELECT DAYOFMONTH(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT DAYOFMONTH(razitko) FROM lidi; 23
.
FunkcePopis
DAYOFWEEK vyřízne z datetime pouze číslo dne v týdnu, neděle=1
Syntaxe
SELECT DAYOFWEEK(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT DAYOFWEEK(razitko) FROM lidi; 2
.
FunkcePopis
DAYOFYEAR vyřízne z datetime pouze číslo dne v roce
Syntaxe
SELECT DAYOFYEAR(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT DAYOFYEAR(razitko) FROM lidi; 54
.
FunkcePopis
WEEKOFYEAR vyřízne z datetime pouze číslo týdne v roce
Syntaxe
SELECT WEEKOFYEAR(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT WEEKOFYEAR(razitko) FROM lidi; 9
.
FunkcePopis
DAY vyřízne z datetime pouze číslo dne
Syntaxe
SELECT DAY(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT DAY(razitko) FROM lidi; 23
.
FunkcePopis
MAKEDATEpro daný rok vypíše datum podle počtu dní od začátku roku
Syntaxe
SELECT MAKEDATE(letopočet, počet_dní);
Vysvětlení částí příkazu
do závorky vložíme letopočet a za čárku počet dní od začátku roku
PříkladyVýsledek
SELECT MAKEDATE(2009, 250);
.
FunkcePopis
MAKETIMEvytvoří formát TIME ze zadaných hodnot h, m , s
Syntaxe
SELECT MAKETIME(h, m, s);
Vysvětlení částí příkazu
do závorky vložíme hodiny, minuty a vteřiny
PříkladyVýsledek
SELECT MAKETIME(20, 09, 20); ; 23
.
FunkcePopis
DAYNAME vyřízne z datetime pouze název dne v týdnu
Syntaxe
SELECT DAYNAME(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT DAYNAME(razitko) FROM lidi; Monday
.
FunkcePopis
LAST_DAY vypíše poslední den v měsíci pro daný datum
Syntaxe
SELECT LAST_DAY(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT LAST_DAY(razitko) FROM lidi; 2009-03-31
SELECT LAST_DAY('2009-03-09'); 2009-03-31
SELECT LAST_DAY(curdate()); 2009-03-31
.
FunkcePopis
TIME vyřízne z datetime pouze časový údaj
Syntaxe
SELECT TIME(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT TIME(razitko) FROM lidi; 09:22:26
.
FunkcePopis
HOUR vyřízne z datetime pouze hodiny
Syntaxe
SELECT HOUR(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT HOUR(razitko) FROM lidi; 09
.
FunkcePopis
MINUTE vyřízne z datetime pouze minuty
Syntaxe
SELECT MINUTE(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT MINUTE(razitko) FROM lidi; 22
.
FunkcePopis
SECOND vyřízne z datetime pouze vteřiny
Syntaxe
SELECT SECOND(sloupec) FROM tabulka;
Vysvětlení částí příkazu
místo sloupce, můžeme uvést curdate() a vyřízne část z aktuálního času
PříkladyVýsledek
SELECT SECOND(razitko) FROM lidi; 22
.
FunkcePopis
PERIOD_DIFF BBBBBBBBBBBBBBBBB
Syntaxe
SELECT PERIOD_DIFF(prvni_datum, druhe_datum);
Vysvětlení částí příkazu
rozdíl v měsících , formát-YYMM nebo YYYYMM. Můžeme použít názvy sloupců a porovnat je
PříkladyVýsledek
SELECT PERIOD_DIFF(0903,199803); 132
.
FunkcePopis
DATEDIFF rozdíl ve dnech mezi 2mi daty, pokud je ve formátu i čas (2010-11-30 23:59:59'), je ignorován
Syntaxe
SELECT DATE_DIFF(prvni_datum, druhe_datum);
Vysvětlení částí příkazu
Můžeme použít názvy sloupců a porovnat je, nebo vložit datum jako řetězec
PříkladyVýsledek
SELECT DATEDIFF('2009-03-09', '2011-03-09'); -730
SELECT * FROM lidi WHERE (DATEDIFF(curdate(),razitko)) >15; vybere vše z tabulky lidi vezme rozdíl mezi aktuálním datem curdate() a sloupcem razítko. Záznamy starší(větší) jak 15 dní zobrazí
.
FunkcePopis
TIMEDIFFrozdíl ve dnech mezi 2mi daty(časy) v hodinách
Syntaxe
SELECT TIMEDIFF('první_čas', 'druhý_čas');
Vysvětlení částí příkazu
Můžeme použít názvy sloupců a porovnat je, nebo vložit datum jako řetězec
PříkladyVýsledek
SELECT TIMEDIFF('2009-03-09 22:00:00', '2011-03-09 21:10:05'); -838:59:59
SELECT TIMEDIFF('22:00:00', '21:10:05'); 00:49:55
.
FunkcePopis
SLEEP sleep-čeká zadaný počet sekund. Docela mi uniká smysl této funkce, leda by jste chtěli naštvat nějakého uživatele
Syntaxe
SELECT SLEEP(číslo);
Vysvětlení částí příkazu
do závorky uvedeme počet vteřin po které bude MYSQL čekat
PříkladyVýsledek
SELECT SYSDATE(), SLEEP(2), SYSDATE(); 2009-03-11 13:52:04 | 0 | 2009-03-11 13:52:06
.
FunkcePopis
TO_DAYS počet dnů po Kristu(od začátku letopočtu)
Syntaxe
SELECT TO_DAYS(sloupec);
Vysvětlení částí příkazu
do závorky uvedeme sloupec, případně řetězec obsahující datum
PříkladyVýsledek
SELECT TO_DAYS(NOW()); 733842
SELECT TO_DAYS("2005-03-10 11:11:11"); 732380
SELECT TO_DAYS(razitko) FROM lidi; 733826
.
FunkcePopis
UNIX_TIMESTAMP Unixový čas. počet vteřin od 1. ledna 1970
Syntaxe
SELECT UNIX_TIMESTAMP();
Vysvětlení částí příkazu
do závorky uvedeme sloupec, případně řetězec obsahující datum
PříkladyVýsledek
SELECT UNIX_TIMESTAMP(); 1236776340
SELECT UNIX_TIMESTAMP("2008-03-10 11:11:11"); 1205143871
.
FunkcePopis
TIME_FORMATzformátovaný výstup času(výsledek 11:30:13)
Syntaxe
SELECT TIME_FORMAT(sloupec, "formátovací_zkratky");
Vysvětlení částí příkazu

Pomocí následujících zkratek si můžeme zformátovat výstup podle své potřeby

Zkratky pro časové hodnoty TIME_FORMAT a DATE_FORMAT
Formát Popis
%M Anglický název měsíce
%W Anglický název dne v týdnu
%D Den s anglickou příponou (1st, 2nd, 3rd, etc.)
%Y Rok jako čtyřmístné číslo
%y Rok jako dvoumístné číslo
%a Anglická zkratka dne v týdnu (Sun..Sat)
%d Den v měsíci (00..31)
%e Den v měsíci (0..31)
%m Měsíc (01..12)
%c Měsíc (1..12)
%b Anglická zkratka měsíce (Jan..Dec)
%j Pořadí dne v roce (001..366)
%H Hodina (00..23)
%k Hodina (0..23)
%h Hodina (01..12)
%I Hodina (01..12)
%l Hodina (1..12)
%i Minuta (00..59)
%r Čas, 12-ti hodinový (hh:mm:ss [AP]M)
%T Čas, 24 hodinový (hh:mm:ss)
%S Sekunda (00..59)
%s Sekunda (00..59)
%p AM pro dopoledne, nebo PM pro odpoledne
%w Číslo dne v týdnu (0=neděle,...,6=sobota)
%U Týden (00..53), kde neděle je prvním dnem v týdnu
%u Týden (00..53), kde pondělí je prvním dnem v týdnu
%řetězec Vypíše zadaný řetězec
PříkladyVýsledek
SELECT TIME_FORMAT(NOW(), "%H:%i:%s"); 14:08:33
SELECT TIME_FORMAT(NOW(), "%H-x-%i-x-%s"); 14-x-08-x-33
SELECT TIME_FORMAT(NOW(), "%Prave je %H hodin %i minut %s vterin"); Prave je 14 hodin 10 minut 49 vterin
.
FunkcePopis
DATE_FORMAT zformátovaný výstup datumu
Syntaxe
SELECT DATE_FORMAT(sloupec, "formátovací_zkratky");
Vysvětlení částí příkazu
stejné jeko u TIME_FORMAT
PříkladyVýsledek
SELECT DATE_FORMAT(NOW(), "%Y:%M:%D"); 2009:March:11th
.
FunkcePopis
ADDDATE k datumu přidá x-dní
Syntaxe
SELECT ADDDATE(sloupec, počet_dní);
Vysvětlení částí příkazu
do závorky uvedeme sloupec(řetězec) a za čárku počet přidávaných dní
PříkladyVýsledek
SELECT ADDDATE(razitko, 5) FROM lidi; přidá 5 dní k datumu vybranému z tabulky
SELECT ADDDATE('2009-02-28 09:22:26', 5); 2009-03-05 09:22:26
SELECT ADDDATE(now(), 5); 2009-03-16 14:22:20
.
FunkcePopis
ADDTIME přidá zadaný čas k datumu vybranému z tabulky
Syntaxe
SELECT ADDTIME(sloupec, "přidávaný_čas");
Vysvětlení částí příkazu
do závorky uvedeme sloupec(řetězec) a za čárku, pokud použijem pouze 2 čísla, přidá vteřiny, 4 čísla jsou hodiny a vteřiny a 6 čísel jsou hh:mm:ss
PříkladyVýsledek
SELECT ADDTIME(razitko, '02:00:00') FROM lidi; 2009-02-23 11:22:26
.
FunkcePopis
AAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBB
Syntaxe
CCCCCCCCCCCCCCCCCCCCCCC
Vysvětlení částí příkazu
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
PříkladyVýsledek
EEEEEEEEEEEEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFF
.
FunkcePopis
DATE_ADD a DATE_SUB přidá (DATE_ADD) /odečte (DATE_SUB) datum a čas od zadaného data
Syntaxe
SELECT DATE_ADD(sloupec, INTERVAL číslo hodnota) FROM tabulka;
Vysvětlení částí příkazu
do závorky uvedeme sloupec (výraz), ke kterému budeme přidávat/odebírat čas
za čárku dáme výraz INTERVAL
poté definujeme počet jednotek které budeme přidávat/odebírat
nakonec je hodnota, což můžou být dny , roky vteřiny a pod.
Možné hodnoty argumentu DATE_SUB, ADDATE, EXTRACT, TIMESTAMPADD
Hodnota argumentu typ Očekávaný formát výrazu
SECOND SEKUNDY
MINUTE MINUTY
HOUR HODINY
DAY DNY
MONTH MĚSÍCE
YEAR ROKY
MINUTE_SECOND "MINUTY:SEKUNDY"
HOUR_MINUTE "HODINY:MINUTY"
DAY_HOUR "DNY HODINY"
YEAR_MONTH "ROKY-MĚSÍCE"
HOUR_SECOND "HODINY:MINUTY:SEKUNDY"
DAY_MINUTE "DNY HODINY:MINUTY"
DAY_SECOND "DNY HODINY:MINUTY:SEKUNDY"


PříkladyVýsledek
SELECT DATE_ADD('2009-01-02', INTERVAL 51 DAY); 2009-02-22 přidá 51 dní k datumu
SELECT DATE_ADD(razitko, INTERVAL 3 MONTH) FROM lidi; přidá 3 měsíce k hodnotám ze sloupce razítko
SELECT DATE_SUB("2009-02-23 ", INTERVAL 18 YEAR); 1991-02-23
SELECT DATE_SUB("2009-02-23 21:00:00", INTERVAL "15 21" DAY_HOUR);2009-02-08 00:00:00
SELECT DATE_SUB(curdate(), INTERVAL "15 21" DAY_HOUR); odečte z aktuálního data "curdate()" 15 dní a 21 hodin
.
FunkcePopis
TIMESTAMPADD k aktálnímu datu přidá zadaný počet časových jednotek
Syntaxe
SELECT TIMESTAMPADD(hodnota,číslo,sloupec) FROM tabulka;
Vysvětlení částí příkazu
v závorce je nejdříve hodnota(rok,minuta-stejné jako u DATE_ADD), za čárkou následuje velikost hodnoty a za další čárkou je sloupec(řetězec),ke kteému se přidává
PříkladyVýsledek
SELECT TIMESTAMPADD(HOUR,5,'2009-01-02'); vytvoří datum ve formátu 2009-01-02 05:00:00 (přidá 5 hodin)
SELECT TIMESTAMPADD(HOUR,5,'2009-01-02 04:00:00'); 2009-01-02 09:00:00
SELECT TIMESTAMPADD(HOUR,5,razitko) FROM lidi; 2009-02-23 14:22:26
.




Matematické funkce


FunkcePopis
AVG vypočítá průměrnou hodnotu v zadaným sloupci
Syntaxe
SELECT AVG(sloupec) FROM tabulka;
Vysvětlení částí příkazu
za příkaz AVG uvedeme do závorky sloupec jehož průměrnou hodnotu chceme spočítat
PříkladyVýsledek
SELECT AVG(plat) FROM lidi; ze sloupce plat a tabulky lidi vypočítá průměrnou hodnotu
.
FunkcePopis
COUNT spočítá, kolik je ve sloupci obsazených(vyplněných) řádek
Syntaxe
SELECT COUNT(sloupec) FROM tabulka;
Vysvětlení částí příkazu
za příkaz COUNT uvedeme do závorky sloupec jehož počet výskytů chceme spočítat
PříkladyVýsledek
SELECT COUNT(plat) FROM lidi; spočítá, kolik je ve sloupci plat obsazených(vyplněných) řádek
.
FunkcePopis
COUNT(DISTINCT ) spočítá, kolik je ve sloupci unikátních obsazených(vyplněných) řádek. Tj, když bude ve sloupci 5x hodnota 1000 a 1x hodnota 2000, tak příkaz vrátí výsledek 2
Syntaxe
SELECT COUNT(DISTINCT sloupec) FROM tabulka;
Vysvětlení částí příkazu
za příkaz COUNT uvedeme do závorky příkaz DISTINCT sloupec jehož počet výskytů chceme spočítat
PříkladyVýsledek
SELECT COUNT(DISTINCT plat) FROM lidi; spočátá nám, kolik je ve sloupci plat unikátních hodnot
.
FunkcePopis
MAX zobrazí ve sloupci položku s nejvyšší hodnotou. Můžeme je použít i pro textové řetězce,kdy zobrazí poslední možnou hodnotu ze sloupce podle daného COLLATION
Syntaxe
SELECT MAX(sloupec) FROM tabulka;
Vysvětlení částí příkazu
za příkaz MAX uvedeme do závorky sloupec jehož maximální hodnotu chceme zjistit
PříkladyVýsledek
SELECT MAX(plat) FROM lidi; ukáže nám nejvyšší hodnotu ve sloupci plat
.
FunkcePopis
MIN zobrazí ve sloupci položku s nejnižší hodnotou. Můžeme je použít i pro textové řetězce,kdy zobrazí první možnou hodnotu ze sloupce podle daného COLLATION
Syntaxe
SELECT MIN(sloupec) FROM tabulka;
Vysvětlení částí příkazu
za příkaz MIN uvedeme do závorky sloupec jehož minimální hodnotu chceme zjistit
PříkladyVýsledek
SELECT MIN(plat) FROM lidi; ukáže nám nejmenší hodnotu ve sloupci plat
.
FunkcePopis
SUM sečte hodnoty sloupce
Syntaxe
SELECT SUM(sloupec) FROM tabulka;
Vysvětlení částí příkazu
za příkaz SUM uvedeme do závorky sloupec jehož součet chceme zjistit
PříkladyVýsledek
SELECT SUM(plat) FROM lidi; sečte hodnoty sloupce plat
.
FunkcePopis
ABS vypočítá absolutní hodnoty ze sloupců, tj ze záporných čísel udělá kladná a kladná nechá jak jsou
Syntaxe
SELECT ABS(sloupec) FROM tabulka;
Vysvětlení částí příkazu
za příkaz ABS uvedeme do závorky sloupec jehož hodnoty převedeme na absolutní
PříkladyVýsledek
SELECT ABS(plat) FROM lidi; vypočítá absolutní hodnoty ze sloupce plat
.
FunkcePopis
ROUND zaokrouhlí sloupce na zadaný počet desetinných míst, pokud se neuvede počet desetinných míst, zaokrouhlí na celé číslo
Syntaxe
SELECT ROUND(sloupec, 3) FROM tabulka;
Vysvětlení částí příkazu
za příkaz ROUND uvedeme do závorky sloupec jehož hodnoty budeme zaokrouhlovat. Za závorku můžeme volitelně uvést na kolik des. míst budeme zaokrouhlovat Pokud uvedeme záporné číslo, zaokrouhlujeme na desítky,stovky atd. POZOR desetinné číslo musí mít oddělovač des. míst tečku
PříkladyVýsledek
SELECT ROUND(plat) FROM lidi; hodnotu (42852.456987) ze sloupce plat zaokrouhlí na celé číslo - 42852
SELECT ROUND(plat, 3) FROM lidi; hodnotu (42852.456987) ze sloupce plat zaokrouhlí na 3 des. čísla - 42852.457
SELECT ROUND(plat, -3) FROM lidi;hodnotu (42852.456987) ze sloupce plat zaokrouhlí na tisíce - 43000
.
FunkcePopis
TRUNCATE ořízne čísla za desetinnou čarkou. pokud Uvedeme v závorce za čárku číslo, ořízne se počet míst na zadanou hodnotu
Syntaxe
SELECT TRUNCATE(sloupec, 3) FROM tabulka;
Vysvětlení částí příkazu
za příkaz TRUNCATE uvedeme do závorky sloupec jehož hodnoty budeme ořezávat. Za závorku můžeme volitelně uvést na kolik des. míst budeme ořezávat. Pokud uvedeme záporné číslo, zaokrouhlujeme na desítky,stovky atd-stejně jako přechozí. POZOR desetinné číslo musí mít oddělovač des. míst tečku,ale pokud neuvedeme na kolik des. míst budeme ořezávat, tak očekává čárku
PříkladyVýsledek
SELECT TRUNCATE(plat) FROM lidi; hodnotu (42852.456987) ze sloupce plat ořízne na číslo - 42852
SELECT TRUNCATE(plat, 3) FROM lidi; hodnotu (42852.456987) ze sloupce plat ořízne na číslo - 42852.456
.
FunkcePopis
MOD vypíše zbytky po dělení mezi první a druhou hodnotou
Syntaxe
SELECT MOD(sloupec, "3") FROM tabulka;
Vysvětlení částí příkazu
za příkaz MOD uvedeme do závorky sloupec jehož hodnoty budeme dělit a za čárku hodnotu kterou dělíme
PříkladyVýsledek
SELECT MOD(plat, "3") FROM lidi; hodnotu (9001) ze sloupce plat vydělí 3 -zbytek po dělení je 1
.
FunkcePopis
PI vypíše hodnotu pí na 6 des. míst
Syntaxe
SELECT PI();
Vysvětlení částí příkazu
hodnotu PI můžeme použít jako proměnnou
PříkladyVýsledek
SELECT MOD(plat, PI()) FROM lidi; vydělí hodnoty ze sloupce plat
.
FunkcePopis
POW spočítá mocninu, první číslo je mocněnec a druhé mocnitel
Syntaxe
SELECT POW(sloupec, 2) FROM tabulka;
Vysvětlení částí příkazu
za příkaz POW uvedeme do závorky sloupec jehož hodnoty budeme umocnovat a za čárku uvedeme na kolikátou budeme mocnit
PříkladyVýsledek
SELECT POW(plat, 3) FROM lidi; hodnotu (1000) ze sloupce plat umocní na 3 -výsledek 1000000000
.
FunkcePopis
SQRT vypočítá danou odmocninu čísla
Syntaxe
SELECT SQRT(sloupec, 2) FROM tabulka;
Vysvětlení částí příkazu
za příkaz SQRT uvedeme do závorky sloupec jehož hodnoty budeme odmocnovat a za čárku uvedeme na kolikátou budeme odmocnit
PříkladyVýsledek
SELECT SQRT(plat) FROM lidi; hodnotu (1000000000) ze sloupce plat odmocní na 3 -výsledek 1000
.
FunkcePopis
RAND vrátí náhodné číslo v rozmezí od 0 - 1 na 14 des. míst
Syntaxe
SELECT RAND();
Vysvětlení částí příkazu
pokud uvedeme do závorek nějaké číslo, vygeneruje se náhodné číslo, můžeme jej kdykoliv zopakovat stejným dotazem
PříkladyVýsledek
SELECT RAND(); 0.70504796011844
SELECT RAND(1); 0.40540353712198 a kdykoliv použijeme dotaz s 1 v tomto sezení, vrátí to samé číslo
.
FunkcePopis
SIN, COS, TAN, COT vypočte sinus, cosinus, tangens a cotangens ze zadaných sloupců(výrazů)
Syntaxe
SELECT SIN(sloupec) FROM tabulka;
Vysvětlení částí příkazu
do závorky uvedeme sloupec, jehož hodnotu budeme počítat pomocí goniometrických funkcí
PříkladyVýsledek
SELECT SIN(plat) FROM lidi; vypočte sínus z hodnot v tabulce lidi
.




Operátory


Operátory jsou matematické a logické, uvedu je pohromadě zde, protože často se nechají požít jak pro výpočty , tak i pro textové operace. Jsou to funkce, nebo filtry, které zužují/rozšiřují možnosti příkazu

PříkazPopis
= rovno
PříkladyPopis příkladu
SELECT prijmeni FROM lidi WHERE jmeno='jaroslav'; vybere řádky sloupce příjmení, kterým odpovídá ve sloupci jmeno hodnota jaroslav
.
PříkazPopis
<=> rovno -včetně hodnot NULL
.
PříkazPopis
<> nebo != nerovno
PříkladyPopis příkladu
SELECT prijmeni FROM lidi WHERE jmeno!='jaroslav'; vybere řádky sloupce příjmení, kterým NEodpovídá ve sloupci jmeno hodnota jaroslav
.
PříkazPopis
< menší
PříkladyPopis příkladu
SELECT prijmeni FROM lidi WHERE plat < 250000; vybere řádky sloupce příjmení, kterým odpovídá ve sloupci plat hodnota menší než 25000
.
PříkazPopis
<= menší nebo rovno
PříkladyPopis příkladu
SELECT prijmeni FROM lidi WHERE plat <= 250000; vybere řádky sloupce příjmení, kterým odpovídá ve sloupci plat hodnota menší nebo rovno 25000
.
PříkazPopis
> věší
PříkladyPopis příkladu
SELECT prijmeni FROM lidi WHERE plat > 250000; vybere řádky sloupce příjmení, kterým odpovídá ve sloupci plat hodnota větší než 25000
.
PříkazPopis
>= větší nebo rovno
PříkladyPopis příkladu
SELECT prijmeni FROM lidi WHERE plat >= 250000; vybere řádky sloupce příjmení, kterým odpovídá ve sloupci plat hodnota větší nebo rovno 25000
.
PříkazPopis
+ součet
PříkladyPopis příkladu
SELECT plat+1000 FROM lidi; připočte hodnotám ze sloupce plat 1000
.
PříkazPopis
- odečet
PříkladyPopis příkladu
SELECT plat-1000 FROM lidi; odečte hodnotám ze sloupce plat 1000
.
PříkazPopis
* součin
PříkladyPopis příkladu
SELECT plat*10 FROM lidi; vynásobí hodnoty ze sloupce plat 10x
.
PříkazPopis
/ podíl
PříkladyPopis příkladu
SELECT plat/10 FROM lidi; vydělí hodnoty ze sloupce plat 10x
.
PříkazPopis
/ podíl
PříkladyPopis příkladu
SELECT plat%10 FROM lidi; vydělí hodnoty ze sloupce plat 10x
.
PříkazPopis
%zbytek po podílu
PříkladyPopis příkladu
.
PříkazPopis
! nebo NOTnegace(zápor)
PříkladyPopis příkladu
SELECT prijmeni FROM lidi WHERE jmeno!='jaroslav'; vybere řádky sloupce příjmení, kterým NEodpovídá ve sloupci jmeno hodnota jaroslav
.
PříkazPopis
|| nebo ORlogické nebo
PříkladyPopis příkladu
SELECT prijmeni FROM lidi WHERE jmeno='jaroslav' || jmeno='jiri';vybere řádky sloupce příjmení, kterým odpovídá ve sloupci jmeno hodnota jaroslav nebo jiri
.
PříkazPopis
&& nebo ANDlogické ano ( a )
PříkladyPopis příkladu
SELECT plat FROM lidi WHERE jmeno='jaroslav' AND prijmeni='votruba'; vybere řádky sloupce plat, kterým odpovídá ve sloupci jmeno hodnota jaroslav a ve sloupci prijmeni hodnota votruba
.
PříkazPopis
WHEREfiltruje sloupce podle zadané hodnoty vyskytující se ve vybraném sloupci
PříkladyPopis příkladu
SELECT prijmeni FROM lidi WHERE jmeno='jaroslav'; vybere řádky sloupce příjmení, kterým odpovídá ve sloupci jmeno hodnota jaroslav
.
PříkazPopis
BETWEEN [NOT] ANDvybere hodnoty mezi, nebo mimo (NOT) uvedené meze
PříkladyVýsledek
SELECT jmeno, plat BETWEEN 25000 AND 30000 FROM lidi; vybere hodnoty z tabulky plat, jejichž rozsah je od 25 000 do 30 000
SELECT jmeno, plat NOT BETWEEN 25000 AND 30000 FROM lidi; vybere hodnoty z tabulky plat, jejichž rozsah je mimo rozsah 25 000 do 30 000
.
PříkazPopis
BETWEEN [NOT] ANDvybere hodnoty mezi, nebo mimo (NOT) uvedené meze
PříkladyVýsledek
SELECT jmeno, plat BETWEEN 25000 AND 30000 FROM lidi; zobrazí seznam lidí a ti kteří mají plat mezi 25 000 a 30 000 budou mít u jména logickou 1, ostatní mají logiskou 0, NULL mají u jména NULL, Pokud použijeme podmínku NOT, obracíme výběr
| Alfred | 1 |
| Petr | 1 |
SELECT jmeno, plat NOT BETWEEN 25000 AND 30000 FROM lidi; stejné jako předchozí,ale rozsah je mimo rozsah 25 000 do 30 000
SELECT jmeno, plat FROM lidi WHERE plat BETWEEN 21000 AND 30000; Pokud použijeme konstrukci s WHERE, dostaneme na výstupu vyfiltrovaný výstup s hodnotami ze sloupce
| Alfred | 27000
| Petr | 29000
.
PříkazPopis
[NOT] INdo závorky definujeme jednotlivé hodnoty, kterým má výstup odpovídat. Pokud použijeme podmínku NOT, obracíme výběr
PříkladyVýsledek
SELECT jmeno, plat FROM lidi WHERE plat NOT IN(21000,27000); vybere pouze lidi, kteří mají plat 21 000 a 27 000 kurun.
.
PříkazPopis
IS [NOT] NULLvybere hodnoty ze sloupců, které nemají vloženu žádnou hodnotu. Pokud použijeme podmínku NOT, obracíme výběr
PříkladyVýsledek
SELECT jmeno, plat from lidi where plat is null;
.
PříkazPopis
[NOT] LIKEfiltr podobný IN, ale do závorky můžeme vložit jen jednu podmínku.Pokud použijeme podmínku NOT, obracíme výběr.Procento "%" nahrazuje libovolný počet znaků, podtržítko "_" pouze jeden znak.
PříkladyVýsledek
SELECT jmeno, plat FROM lidi WHERE plat like('21000'); zobrazí sloupce jmeno, plat, u u kterých je ve sloupci plat uvedena hodnota 21 000
SELECT jmeno, plat FROM lidi WHERE plat NOT like('2%'); zobrazí sloupce jmeno, plat, u u kterých je ve sloupci plat uvedena hodnota začínající na 2
.
PříkazPopis
REGEXPfiltrujeme podle ragulárních výrazů, přehled těchto výrazů je na stránce ZDE .Regulární výraz uzavíráme do uvozovek
PříkladyVýsledek
SELECT jmeno, plat FROM lidi WHERE plat REGEXP '^27'; zobrazí sloupce jmeno, plat, u u kterých je ve sloupci plat uvedena hodnota mající na začátku 27
.





Detailnější rozvedení


Kódování-problémy s češtinou


Vzhledem k tomu, že čeština stále není hlavním světovým jazykem, tak i MYSQL je defaultně v jiné znakové sadě (latin1). Takže pokud si chceme užít češtinu (němčinu, korejštinu :-)) ), tak musíme něco málo upravit.


Jsou to tyto věci:

_Znaková sada (CHARACTER SET )

ve které je DB, tabulka , nebo sloupec. V zasadě nic nebrání tomu, aby DB byla v jednom kodování (latin1), několik tabulek v druhém (UTF8) a sloupce ve třetím (cp866). Nicméně většinou stačí nastavit již při vytváření DB jedno kodování a to se dědičně promítne i do tabulek a sloupců. Kodování podporující české znaky jsou tyto:
-latin2
-cp1250
-cp852
-keybcs2
-utf8

změnit jej můžeme nastálo pro celou MYSQL, tím že vložíme do /etc/my.cnf do sekce [MYSQLD] následující řádku
collation-server=utf8_czech_ci

_Řazení (COLLATION)

které říká DB podle jaké znakové sady se bude výběr řadit. Na konci každého kodování bývá bud cs nebo ci.
cs znamená, že že jsou brána při řazení v úvahu malá a velká písmena (case sensitive)
ci znamená, že že NEjsou brána při řazení v úvahu malá a velká písmena (case insensitive)

změnit jej můžeme nastálo pro celou MYSQL, tím že vložíme do /etc/my.cnf do sekce [MYSQLD] následující řádku
collation_server=utf8_czech_ci

_Kodování, v jakém očekává data klient





Znaková sada - CHARACTER SET
FunkcePopis
SHOW VARIABLES LIKE 'character_set_system'; zobrazí v jakém kodování je celá MYSQL
PříkladyVýsledek
SHOW VARIABLES LIKE 'character_set_system'; latin1
.
FunkcePopis
SHOW CHARACTER SET; zobrazí seznam dostupných znakových sad
PříkladyVýsledek
SHOW CHARACTER SET;
Charset Description Default collation
dec8 DEC West European dec8_swedish_ci
cp850 DOS West European cp850_general_ci
hp8 HP West European hp8_english_ci
koi8r KOI8-R Relcom Russian koi8r_general_ci
SHOW CHARACTER SET like 'cp%'; vyfiltruje pouze kodování, která obsahují na začátku cp
.
FunkcePopis
CHARSET zobrazí v jakém kodování je sloupec
PříkladyVýsledek
SELECT CHARSET(jmeno) FROM lidi; latin1
.
PříkazPopis
CREATE DATABASE vytvoří databázi
PříkladyPopis příkladu
CREATE DATABASE JmenoDB CHARACTER SET latin2 ;vytvoří DB JmenoDB s kodováním latin2
.
PříkazPopis
ALTER DATABASEupravuje vlastnosti DB
PříkladyPopis příkladu
ALTER DATABASE JmenoDB CHARACTER SET latin2 ; upraví DB JmenoDB na kodování latin2
.
FunkcePopis
CONVERT převádí mezi jednotlivými znakovými sadami, sady si můžete vylistovat příkazem SHOW CHARSET;
Syntaxe
SELECT CONVERT(sloupec USING kodovani) FROM tabulka;
PříkladyVýsledek
SELECT CONVERT(jmeno USING utf8) FROM lidi; hodnoty ze sloupce jmeno se překodují na UTF8
.
PříkazPopis
SHOW CREATE DATABASE vypíše jaké má daná DB kodování
PříkladyPopis příkladu
SHOW CREATE DATABASE pokusna;pokusna | CREATE DATABASE `pokusna` /*!40100 DEFAULT CHARACTER SET latin1 */
.
PříkazPopis
SHOW CREATE TABLE vypíše jaké má daná DB kodování
PříkladyPopis příkladu
SHOW CREATE TABLE lidi;CREATE TABLE `lidi` ( `sloupec` char(10) collate latin1_danish_ci default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_danish_ci
.
PříkazPopis
SHOW FULL COLUMNS vytvoří databázi
PříkladyPopis příkladu
SHOW FULL COLUMNS FROM JmenoDB;tímto si vylistujeme vlasnosti (a i kodování) sloupce
.




Řazení - COLLATION
PříkazPopis
SHOW VARIABLES like 'collation_server'; zobrazí v jakém řazení je celá MYSQL
.
FunkcePopis
SHOW COLLATION; zobrazí kodování, které je možno použít
PříkladyVýsledek
SHOW COLLATION; zkráceno
Collation Charset Id Default Compiled Sortlen
utf8_spanish_ci utf8 199 Yes 8
utf8_swedish_ci utf8 200 Yes 8
utf8_turkish_ci utf8 201 Yes 8
utf8_czech_ci utf8 202 Yes 8
SHOW COLLATION LIKE 'utf8%'; zúží výpis pouze na UTF8
.
PříkazPopis
CREATE DATABASE vytvoří databázi
PříkladyPopis příkladu
CREATE DATABASE JmenoDB CHARACTER SET latin2 COLLATE latin2_czech_ci;;vytvoří DB JmenoDB s kodováním latin2 a řazením latin2
.




Kodování klienta
FunkcePopis
SHOW VARIABLES LIKE 'character_set_client' zobrazí v jakém kodování je klient aktuálně přistupjící k mysql (pro nás je to příkazová řádnka)
PříkladyVýsledek
SHOW VARIABLES LIKE 'character_set_client'; latin1
.
FunkcePopis
SET NAMES nastavíme aktuálnímu klientovi v jakém kodování má očekávat a posílat data. Tento příkaz musíme uvést hned po přihlášení klienta k DB, pokud není nastaveno kodování defaultně
PříkladyVýsledek
SET NAMES utf8; klient očekává a posílá data v UTF8. T
.



U importů je třeba dodržet následují podmínky
1. Importovaný soubor musí být ve správné znakové sadě (UTF-8, například)
2. Klient mysql musí obdržet příkaz SET NAMES XXX
3. Data se musí ukládat do sloupce se správně nadefinovanou znakovou sadou.

Pokud nevíte jak převést kodování z jednoho do druhého, zde je malý návod
-Pro Windows
Můžete použít editor
PSpad


-Pro Unix-like
v jakém kodování ten který soubor je, můžete zjistit pomocí programu enca
Instalace Enca
cd /usr/ports/converters/enca
make all install
rehash


vylistování dostupných kodovaní, která program zvládá
enca --list languages'

zjištění konkrétního souboru, za parametr L dosadíme v jaké znak. sadě je dokument, případně použijeme "none"
enca -L czech /usr/local/www/apache22/data/index.html
Výsledek
Universal transformation format 8 bits; UTF-8


Převod provádí utilita iconv
Vylistuje seznam možných kodování, mezi kterými umí převést
iconv -l
převede z UTF-8 do ISO8859-2 soubor text_utf.txt a uloží jej do souboru text_latin2.txt
iconv -f UTF-8 -t ISO8859-2 text_utf.txt -o text_latin2.txt




Spojování výběrů z tabulek



požadovaná data bývají často uložena v různých sloupcích a my potřebujeme výběry poskládat k sobě.
Následuje několik možností, jak toho dosáhnout.

vytvořil jsem 2 tabulky ve kterých jsou následující data. Hodnota NULL v tabulce bydliste je úmyslně, stejně tak jsem i vynechal hodnoutu 4 ve sloupci ID tabulky zamestnanci Při výběru z různých tabulek se může stát, že sloupce v nich obsazené mají stejný název a DB není schopna poznat, který sloupec máte na mysli. Pak se vám objevý chyba v podobném smyslu.
Column 'ID' in group statement is ambiguous
řešení je jednoduché. Umístnění můžete nadefinovat ve formátu tabulka.sloupec (např. zamestnanci.ID)
Nejprve vždy uvedu výběr všech dat z tabulky a pak výběr omezím na vybrané sloupce.


select * from bydliste;
adresa ID
-------------------
Dvorec 12 1
Borovany 45 2
Trebec 18 3
NULL 4



select * from zamestnanci;
jmeno prijmeni ID
-----------------------
Jiri Novak 1
Jiri Slepicka 2
Jan Prikryl 3
Jiri NULL 5



Spojování pomocí WHERE


select * from zamestnanci, bydliste where bydliste.ID=zamestnanci.ID; příkaz vybere všechny sloupce obou tabulek a sjednotí řádky podle hodnot ID

stejného výsledku dosáhneme i s pomocí JOIN a filtru ON
select * from zamestnanci join bydliste on bydliste.ID=zamestnanci.ID;
jmeno prijmeni ID adresa ID
----------------------------------
Jiri Novak 1 Dvorec 12 1
Jiri Slepicka 2 Borovany 45 2
Jan Prikryl 3 Trebec 18 3


stejné, jako předcházející, jen vybereme požadované sloupce
select jmeno, prijmeni, adresa from zamestnanci, bydliste where bydliste.ID=zamestnanci.ID;
nebo
select jmeno, prijmeni, adresa from zamestnanci join bydliste on bydliste.ID=zamestnanci.ID;
jmeno prijmeni adresa
--------------------------
Jiri Novak Dvorec 12
Jiri Slepicka Borovany 45
Jan Prikryl Trebec 18




Spojování pomocí JOIN

JOIN spoji tabulky mezi sebou. Obyčejný JOIN provede kartézský součin, tj ke každé hodnotě najde kombinaci z druhého sloupce. Pozor, pokud budete mít v DB mnoho záznamů, tak MYSQL pěkně potrápíte
select * from zamestnanci join bydliste;
jmeno prijmeni ID adresa ID
----------------------------------
Jiri Novak 1 Dvorec 12 1
Jiri Slepicka 2 Dvorec 12 1
Jan Prikryl 3 Dvorec 12 1
Jiri NULL 5 Dvorec 12 1
Jiri Novak 1 Borovany 45 2
Jiri Slepicka 2 Borovany 45 2
Jan Prikryl 3 Borovany 45 2
Jiri NULL 5 Borovany 45 2
Jiri Novak 1 Trebec 18 3
Jiri Slepicka 2 Trebec 18 3
Jan Prikryl 3 Trebec 18 3
Jiri NULL 5 Trebec 18 3
Jiri Novak 1 NULL 4
Jiri Slepicka 2 NULL 4
Jan Prikryl 3 NULL 4
Jiri NULL 5 NULL 4


stejné, jako předcházející, jen sem přehodil názvy sloupců

select * from bydliste join zamestnanci;
adresa ID jmeno prijmeni ID
----------------------------------
Dvorec 12 1 Jiri Novak 1
Borovany 45 2 Jiri Novak 1
Trebec 18 3 Jiri Novak 1
NULL 4 Jiri Novak 1
Dvorec 12 1 Jiri Slepicka 2
Borovany 45 2 Jiri Slepicka 2
Trebec 18 3 Jiri Slepicka 2
NULL 4 Jiri Slepicka 2
Dvorec 12 1 Jan Prikryl 3
Borovany 45 2 Jan Prikryl 3
Trebec 18 3 Jan Prikryl 3
NULL 4 Jan Prikryl 3
Dvorec 12 1 Jiri NULL 5
Borovany 45 2 Jiri NULL 5
Trebec 18 3 Jiri NULL 5
NULL 4 Jiri NULL 5


stejné, jako předcházející, jen vybereme požadované sloupce

select jmeno, prijmeni, adresa from zamestnanci join bydliste;
jmeno prijmeni adresa
--------------------------
Jiri Novak Dvorec 12
Jiri Slepicka Dvorec 12
Jan Prikryl Dvorec 12
Jiri NULL Dvorec 12
Jiri Novak Borovany 45
Jiri Slepicka Borovany 45
Jan Prikryl Borovany 45
Jiri NULL Borovany 45
Jiri Novak Trebec 18
Jiri Slepicka Trebec 18
Jan Prikryl Trebec 18
Jiri NULL Trebec 18
Jiri Novak NULL
Jiri Slepicka NULL
Jan Prikryl NULL
Jiri NULL NULL




Pomocí NATURAL JOIN vybereme a sloučíme pouze ty hodnoty , které k sobě pasují pomocí hodnot ve sloupcích stejných názvů. Místo NATURAL, můžeme použít zápis pomocí USING, ale pak musí mít sloupce v obou tabulkách stejný název
select * from zamestnanci natural join bydliste;

select * from zamestnanci join bydliste using (ID);
ID jmeno prijmeni adresa
------------------------------
1 Jiri Novak Dvorec 12
2 Jiri Slepicka Borovany 45
3 Jan Prikryl Trebec 18



stejné, jako předcházející, jen vybereme požadované sloupce
select jmeno, prijmeni, adresa from zamestnanci natural join bydliste;
select jmeno, prijmeni, adresa from zamestnanci join bydliste using (ID);
jmeno prijmeni adresa
--------------------------
Jiri Novak Dvorec 12
Jiri Slepicka Borovany 45
Jan Prikryl Trebec 18



LEFT/RIGHT JOIN
významově jsou to stejné příkazy. Jediný rozdíl je v tom, která tabulka je uvedena na levo (pro left), tj. která je uvedena před LEFT JOIN, ta bude zobrazena dříve a k ní dopárovány záznamy z druhé tabulky (včetně hodnot NULL)

select * from zamestnanci left join bydliste on bydliste.ID=zamestnanci.ID;
jmeno prijmeni ID adresa ID
----------------------------------
Jiri Novak 1 Dvorec 12 1
Jiri Slepicka 2 Borovany 45 2
Jan Prikryl 3 Trebec 18 3
Jiri NULL 5 NULL NULL



Pokud prohodíme mezi sebou v příkazu názvy tabulek a místo LEFT použijeme RIGHT, dostaneme stejný výsledek

select * from zamestnanci right join bydliste on zamestnanci.ID=bydliste.ID;
jmeno prijmeni ID adresa ID
----------------------------------
Jiri Novak 1 Dvorec 12 1
Jiri Slepicka 2 Borovany 45 2
Jan Prikryl 3 Trebec 18 3
Jiri NULL 5 NULL NULL


stejné, jako předcházející, jen vybereme požadované sloupce
select jmeno, prijmeni, adresa from bydliste left join zamestnanci on zamestnanci.ID=bydliste.ID;
jmeno prijmeni adresa
--------------------------
Jiri Novak Dvorec 12
Jiri Slepicka Borovany 45
Jan Prikryl Trebec 18
NULL NULL NULL





můžeme spočítat, kolik výskytů se nachází ve vybraném sloupci, který má odpovídající hodnoty i v druhé tabulce
select count(jmeno) as "pocet stejnych jmen", jmeno from bydliste join zamestnanci on zamestnanci.ID=bydliste.ID group by jmeno;
pocet stejnych jmen jmeno
--------------------------
1 Jan
2 Jiri



select count(jmeno) as "pocet stejnych jmen", jmeno, prijmeni, adresa from bydliste left join zamestnanci on zamestnanci.ID=bydliste.ID group by jmeno;
pocet stejnych jmen jmeno prijmeni adresa
0 NULL NULL NULL
1 Jan Prikryl Trebec 18
2 Jiri Novak Dvorec 12




Spojení 3 tabulek.
Spojení je realizováno díky prostřední tabulce. Nenapadá mě nějaká smysluplný příklad, takže mě prosím nekamenujte.
V příkladu může bydlet více lidí na jedné adrese, případně jeden člověk může mít bydliště na více adresách
Vytvořil jsem 3 tabulky přičemž tabulka "matrika" bude tvořit spojovací člen mezi tabulkami "zamestnanci" a "bydliste"

select * from zamestnanci;
jmeno prijmeni homeless
--------------------------
Jan Slepicka Y
Jiri Koza Y
Jan Prikryl N
Jiri Novak Y
Jaroslav Votruba N



select * from matrika;
bydli kde
-----------
N 1
N 3
N 2
N 4



select * from bydliste;
adresa ID
----------------------
Dvorec 12 1
Borovany 45 2
Trebec 18 3
Budejce, Nova 45 4



select distinct jmeno, prijmeni, adresa
from zamestnanci, matrika, bydliste
where zamestnanci.homeless=matrika.bydli
and matrika.kde=bydliste.ID and adresa="Dvorec 12";

jmeno prijmeni adresa
---------------------------
Jan Prikryl Dvorec 12
Jaroslav Votruba Dvorec 12



select jmeno, prijmeni, adresa
from zamestnanci
join matrika on zamestnanci.homeless = matrika.bydli
join bydliste on matrika.kde=bydliste.ID
where prijmeni="Votruba";

jmeno prijmeni adresa
----------------------------------
Jaroslav Votruba Dvorec 12
Jaroslav Votruba Borovany 45
Jaroslav Votruba Trebec 18
Jaroslav Votruba Budejce, Nova 45





Indexy a klíče v tabulkách



pomáhají zrychlit vyhledávání ve velkých DB. V malých nemají význam.
Indexy se ukládají do samostatného souboru a smazání indexu nemá žádný vliv na data obsažená v DB.
Má význam je dávat pouze na sloupce, podle kterých se bude vyhledávat a většinou mají název podle indexovaného sloupce


Druhy indexů:
-klasický index
pouze urychluje přístup k datům

Příkazy pro práci s klasickými indexy

založení klíče s novou tabulkou
CREATE TABLE knihy (sloupec1 VARCHAR (50), sloupec2 VARCHAR(50), INDEX (nazev_indexu));

založení klíče do existující tabulky
ALTER TABLE sloupec ADD INDEX (nazev_indexu);

smazání indexu z tabulky-POZOR název indexu se při mazání nedává do závorek
ALTER TABLE knihy DROP INDEX nazev_indexu;



-unikátní index
kromě své původní funkce hlídají i to, aby se žádná z hodnot v inexovaném sloupci neopakovala

Příkazy pro práci s unikátními indexy

založení klíče s novou tabulkou
CREATE TABLE knihy (sloupec1 VARCHAR (50), sloupec2 VARCHAR(50), UNIQUE (nazev_indexu));

založení klíče do existující tabulky
ALTER TABLE sloupec ADD UNIQUE (nazev_indexu);

smazání indexu z tabulky-POZOR název indexu se při mazání nedává do závorek. Maže se stejně jako obyčejný index
ALTER TABLE knihy DROP INDEX nazev_indexu;



-fulltextový index
databáze vytváří seznam všech slov, která se objevují v textu.
Má následující omezení:
pouze pro textové sloupce (char, varchar, text)
slova kratší jak 4 znaky nejsou brána v potaz (nechá se nastavit v configu v sekci [mysqld] nastavíte ft_min_word_len=3)
pokud není sloupec definován jako BINARY, nerozlišují se velká a malá písmena

Příkazy pro práci s fulltextovými indexy

založení klíče s novou tabulkou
CREATE TABLE knihy (sloupec1 VARCHAR (50), sloupec2 VARCHAR(50), FULLTEXT (nazev_indexu));

založení klíče do existující tabulky
ALTER TABLE sloupec ADD FULLTEXT (nazev_indexu);

smazání indexu z tabulky-POZOR název indexu se při mazání nedává do závorek. Maže se stejně jako obyčejný index
ALTER TABLE knihy DROP INDEX nazev_indexu;

výběr fulextového indexu
SELECT * FROM clanky WHERE MATCH (nazev_fultextu) AGAINST ('vzorove_slovo');



-primární klíč
je jedinečný klíč, který je nenulový a každá hodnota je neopakovatelná

založení klíče s novou tabulkou (automatická incrementace)
CREATE TABLE Jmeno_tabulky (Jmeno_sloupce INT AUTO_INCREMENT PRIMARY KEY NOT NULL);

založení klíče do existující tabulky
ALTER TABLE Jmeno_tabulky ADD PRIMARY KEY (Jmeno_sloupce);

založení klíče do existující tabulky (automatická incrementace)
ALTER TABLE Jmeno_tabulky ADD Jmeno_sloupce INT NOT NULL PRIMARY KEY AUTO_INCREMENT;

smazání indexu z tabulky
ALTER TABLE Jmeno_tabulky DROP PRIMARY KEY;

-cizí klíč
odkazuje na data v hlavních tabulkách. Používá se na propojení tabulek

založení klíče s novou tabulkou
CREATE TABLE Tabulka(sloupec1, FOREIGN KEY (jmeno_ciziho_klice) REFERENCES jina_tabulka (klic_v_te_tabulce);



Zobrazení indexů a klíčů v tabulce
SHOW INDEX FROM nazev_tabulky;

SHOW KEYS FROM nazev_tabulky;



Nastavení logování



pokud se MYSQL neloguje, postupujeme následujícím postupem

zkopčit konfig (pokud již není)
cp /usr/local/share/mysql/my-large.cnf /etc/my.cnf
zeditovat sekci [mysqld]
ee /etc/my.cnf
vložíme do sekce [mysqld]

log=/var/log/mysql.log

vytvoříme log soubor a změníme vlastníka
touch /var/log/mysql.log
chown mysql:mysql /var/log/mysql.log
nastartujeme DB
/usr/local/etc/rc.d/mysql-server start

KONTROLA NáBěHU
tail /var/log/mysql.log
###########################
/usr/local/libexec/mysqld, Version: 5.0.37-log (FreeBSD port: mysql-server-5.0.37). started with:
Tcp port: 3306 Unix socket: /tmp/mysql.sock
Time Id Command Argument
###########################


Externí příkazy


Používají se většinou pokud potřebujete založit strukturu DB, případně i vložit nějaká data. Klasické použití je u PHP projektů, které využívají DB.

Zadávání příkazů ze souboru v řádkovém klientu mysql provedeme příkazem
SOURCE cesta/soubor;

nebo jej můžeme vložit příkazem
mysql -uroot -pheslo < prikazy.sql


přesměrování výstupu do souboru

výstup můžeme nasměrovat do souboru
mysql -t < prikazy.sql = vystup.txt
v souboru prikazy.sql vypíšeme příkazy, které se mají vykonat, jako poslední použijeme SELECT ......
výsledek se nasměruje do souboru vystup.txt, kde jsou výsledky odděleny tabelátory (s parametrem -t jsou v tabulce)

jedno z použití může být třeba dotaz který den připadá 24.12.2020
vytvoříte soubor prikaz.sql
ee prikaz.sql
a vložíte do něj říkaz
select dayname('2020-12-24');
uložíte, zavřete
necháte to zjistit MYSQL příkazem
mysql -uroot -pheslo < prikaz.sql == prikaz.sql
a on vám do souboru napíše co je to za den. Výsledek
cat prikaz.sql
select dayname('2020-12-24');
Thursday


stejně tak, pokud budete chtít vědět kolik dní je mezi 2mi daty, použijete příkaz
SELECT DATEDIFF('2009-03-09', '2011-03-09');
se stejným postupem



zjištění informací o nastavení MYSQL, DB a tabulkách



zobrazí seznam systémových proměnných MYSQL
SHOW VARIABLES;

zobrazí seznam varování
SHOW WARNINGS;

zobrazí seznam chyb
SHOW ERRORS;

zobrazí vlastnosti tabulky
DESC tabulka; nebo SHOW COLUMNS FROM tabulka;
----------
Field Type Null Key Default Extra
----------
jmeno varchar(20) YES NULL
prijmeni varchar(40) YES MUL NULL
homeless varchar(5) YES NULL
----------



zobrazí všechny vlastnosti tabulky
SHOW FULL COLUMNS FROM zamestnanci;
----------
Field Type Collation Null Key Default Extra Privileges Comment
----------
jmeno varchar(20) latin1_swedish_ci YES NULL select,insert,update,references
prijmeni varchar(40) latin1_swedish_ci YES MUL NULL select,insert,update,references
homeless varchar(5) latin1_swedish_ci YES NULL select,insert,update,references
----------



zanalyzuje tabulku a díky výsledkům je trochu zrychlen přístup indexu k datovým hodnotám
ANALYZE TABLE lidi;
--------------
Table Op Msg_type Msg_text
--------------
pokusna.lidi analyze status OK
--------------



optimalizuje tabulky. Zrychluje přístup k tabulkám, jejichž obsah se často mění. Měl by být pravidelně spouštěn nad tabulkami ve kterých je mnoho operací UPDATE a DELETE
OPTIMIZE TABLE lidi;
--------------
Table Op Msg_type Msg_text
--------------
pokusna.lidi optimize status OK
--------------



dovoluje určit, kde by se DB mohla zrychlit
EXPLAIN SELECT * FROM lidi;
----
id select_type table type possible_keys key key_len ref rows Extra
----
1 SIMPLE lidi ALL NULL NULL NULL NULL 12
----




Zálohování, exporty a importy


Mysqldump

Asi nejlepším nástrojem pro zálohování MYSQL je nástroj Mysqldump. Díky množství voleb umožnuje nastavit zálohovací příkaz podle toho jak potřebujeme. Je možno zálohovat jednu DB, více DB najednou, případně i kompletně všechny DB. První varianta umožnuje zálohovat pouze některé tabulky, což v těch dalších 2 možné není.


Parametry MYSQLDUMP
--add-locks Uzamkne a pak odemkne každou tabulku.
--add-drop-table Volba přidá příkazy DROP (smazání tabulky) do vygenerovaného souboru. Vkládání příkazu DROP je vhodné v případě, že chcete databázi při načítání ze zálohy kompletně přepsat.
-A, --all-databases Zazálohuje všechny databáze. Volba dělá to samé jako --databases nad vybranými databázemi.
-B, --databases Zazálohuje vyjmenované databáze.Názvy DB uvádíme za parametr a oddělujeme je MEZEROU.
--compatible=názevExport je kompatibilní s následujícími formáty: ANSI, MYSQL1323, MYSQL140, POSTRGRESQL, ORACLE,MSSQL, DB2, MAXDB, NO_KEY_OPTIONS, nO_TABLE_OPTIONS, NO _FIELD_OPTIONS
--complete_inserts Vytvoří pro každý záznam samostatný příkaz INSERT
--default-character-set=název Export bude ve vybrané znakové sadě.
-h jméno hosta, defautně je localhost
-K, --disable-keys Indexy budou aktualizovány až po vložení záznamů, což je rychlejší
-f, --force Pokračuje v zálohování i pokud se vyskytnou chyby. Bez této volby backup skončí při nalezení chyby
-x, --lock-all-tables Uzamkne všechny tabulky pro celou DB. Takto se během zálohy žádná tabulka nezmění
-l, --lock-tables Volba pozamyká všechny tabulky v dané databází ještě před provedením zálohy.
--no-create-db Nezapisují se příkazy CREATE DATABASE. Ty se zapisují jen s paramatrem -B nebo -A
--no-create-info Nezapisují se příkazy INSERT, ale jen CREATE TABLE
-d, --no-data Nezapisují se pak žádná data. Volba je vhodná v případě uložení pouze struktury tabulek.
-q, --quickpokud se celá tabulka nevejde do paměti, je vhodné použít tuto volbu
-T adresář, --tab=adresář Zapíše data do vybraného adresáře, kde budou pro každou tabulku soubory *.sql (obsahující strukturu tabulky) a *.txt (data ve formátu SELECT INTO OUTFILE)
-X, --xml Vytvoří soubor XML s obsahem tabulky-neobsahuje informace o její struktuře
--opt To samé jako --quick --add-drop-table --add-locks --extended-insert --lock-tables. Jedná se o nejrychlejší zálohu co se týká načítání z MySQL serveru. Navíc si nemusíte pamatovat spoustu voleb, stačí si zapamatovat tuto "optimální", a tedy často používanou.
-e, --extended-insert Používá novou rychlejší syntaxi pro INSERT.
-pyour_pass, --password[=your_pass] "your_pass" je heslo pro přístup k databázi.
-u user_name, --user=user_name "user_name" je uživatelské jméno pro přístup k databázi.



Příklady

záloha jedné DB
mysqldump --user=uzivatel --password=heslo nazev_jedny_db > backup_db.sql

záloha více DB
mysqldump -B chat druha --user=root --password=heslo > /home/votruba/backup.sql

kompletní záloha MYSQL (vsechny db).
mysqldump -A -Q --user=uzivatel --password=heslo > backup.sql


BACKUP TABLE


tento příkaz dovolí zálohovat jednu tabulku. Funguje tak, že zálohuje soubory frm a MYD dané tabulky.

BACKUP TABLE [názevtabulky] TO '/cesta_k_zaloze'


SELECT * INTO OUTFILE


Výpisuje záznamy do souboru

SELECT * INTO OUTFILE 'nazev_vystupniho_souboru' FIELDS TERMINATED BY ';' FROM nazev_tabulky;
- příkaz zapíše data z tabulky "nazev_tabulky" do souboru a jednotlivé položky oddělí středníkem
- př.: SELECT * INTO OUTFILE 'prectene.txt' FIELDS TERMINATED BY ',' FROM knihovna WHERE poznamka='precteno';
- příklad zapíše do souboru informace o přečtených knihách a oddělí je čárkou


DUPLIKACE TABULEK


jistým druhem zálohování může být i duplikování tabulek v rámci jedné DB. Provádí se to příkazem
CREATE TABLE account2 LIKE account;


3rdPARTY


nástroje 3tích stran

MYBACKUP
na adrese
http://www.mswanson.com/mybackup/
je perlový script pro zálohování MYSQL. Na této adrese je i script na obnovení DB


AUTOMYSQLBACKUP
na adrese
http://sourceforge.net/projects/automysqlbackup/
je další, tentokrát shellový script.


MYSQLHOTCOPY
na adrese
http://dev.mysql.com/doc/refman/5.0/en/mysqlhotcopy.html/
další perlový script, který dokáže zálohovat více tabulek nebo více DB.




IMPORT DAT DO DB


program MYSQLDUMP nemá žádný opak , který by data importoval. Na import se používá řádkový klient mysql.Použití je následující:

mysql -uroot -pheslo < script.sql
přičemž je pouze třeba zkontrolovat, zda má script na začátku příkaz USE DATABASE;, jinak musíme uvést v příkazu pro import i databázy, do které se bude importovat.


RESTORE TABLE


je opakem BACKUP TABLE a má následující syntaxi
RESTORE TABLE tbl_name [, tbl_name] ... FROM '/path/to/backup/directory'


LOAD DATA INFILE


je opakem příkazu SELECT * INTO OUTFILE
Syntaxi má následující:
LOAD DATA [volby] INFILE 'cesta/k/souboru' [volby_duplikace]INTO TABLE jmeno_tabulky [volby_importu] [IGNORE pocet_radku LINES] [(seznam_sloupcu)];
více zde


Import CSV souborů


CSV soubory jsou data v textové podobě, v nichž jsou jednotlivé záznamy oddělovány nějakým znakem – nejčastěji čárkou.Nechají se třeba vyexportovat z excelu
1,"Petr","Uher",
2,"Adam","Nový",

pomocí příkazu mysqlimport je můžem natáhnout do DB

Přepínač Popis
-d Před začátkem importu odstraní všechna data z tabulky, do které bude import proveden.
-f Tento přepínač zajistí, že import bude pokračovat, i když dojde k nějaké chybě.
-h [název serveru] Nastaví název SQL serveru, kterému budete importovat data. Standardně je nastaven localhost.
-i Zajistí, aby byly ignorovány všechny záznamy, které mají stejný jedinečný klíč.
-l Na dobu importu uzamkne všechny tabulky, do kterých se bude importovat.
-L Příkaz mysqlimport použije při importu soubor z místního počítače. Nemusí jej proto nejdříve stahovat.
-r Nahradí v tabulce záznam, jehož jedinečná hodnota se shoduje. Opak přepínač –i.
--fields-enclosed-by=znak Znak, který uzavírá data polí. Standardně mysqlimport předpokládá, že nejsou uzavřena do žádných znaků, ale většinou se setkáte s tím, že jsou uzavřena do uvozovek.
--fields-escaped-by=znak Nastaví, který znak bude používán jako znak ukončení. Mysqlimport standardně neočekává žádný znak.
--fields-terminated-by=znak Určuje znak, který bude používán jako oddělovač jednotlivých polí. Většinou je tento znak čárka, ale mysqlimport implicitně očekává tabulátor.
--lines-terminated-by=znak Znak, která ukončuje záznam. Mysqlimport očekává implicitně znak nového řádku.


Nyní tedy využijeme těchto přepínačů a sestavíme následující příkaz:
mysqlimport –u root –p --fields-enclosed-by=" --fields-terminated-by=, Pokus uzivatele.txt

K vysvětlení předcházejícího řádku. Voláte příkaz mysqlimport hned s několika přepínači. Ty první slouží k přihlášení k SQL serveru (pro import potřebujete patřičná práva), následně pomocí přepínače –fields-enclosed-by nastavujete, že jednotlivé záznamy budou uzavřeny do uvozovek a následný přepínač – fields-terminated-by nastavuje, jakým znakem budou od sebe oddělována jednotlivá pole. Předposlední údaj příkazu značí název databáze, do které budete importovat data. Aby bylo patrné, do které tabulky se mají data importovat, je nutné podle příslušné tabulky pojmenovat soubor. Z tohoto příkladu je patrné, že soubor uzivatele.txt bude importován do tabulky uzivatele.



Myphpadmin



je to webové rozhraní pro práci s MYSQL-je třeba mít nainstalovaný Apache s PHP

cd /usr/ports/databases/phpmyadmin/
make install

vybrat všechny volby
v /usr/local/etc/apache22/Includes vytvořit soubor phpmyadmin.conf příkazem ee /usr/local/etc/apache22/Includes/phpmyadmin.conf a vložit do něj následující

Alias /phpmyadmin "/usr/local/www/phpMyAdmin/"
<Directory "/usr/local/www/phpMyAdmin">
Options none
AllowOverride AuthConfig
Order Deny,Allow
Allow from all
</Directory>


NASTAVIT autentizaci

ee /usr/local/www/phpMyAdmin/.htaccess
upravit na
AuthUserFile /usr/local/www/phpMyAdmin/.htpasswd
AuthGroupFile /dev/null
AuthName "phpMyAdmin sekce"
AuthType Basic
<limit GET POST/>
require valid-user
</limit>


htpasswd -c /usr/local/www/phpMyAdmin/.htpasswd admin
-parametr -c vytvoří soubor při přidávání dalších uživatelů nepoužívat-původní by se přepsal
nastavit heslo


přiřadit práva a vlasnictví
chown www:www /usr/local/www/phpMyAdmin/.ht* && chmod 750 /usr/local/www/phpMyAdmin/.ht*

odzálohujeme konfigurák phpMyAdmina

cp /usr/local/www/phpMyAdmin/config.inc.php /usr/local/www/phpMyAdmin/config.inc.php.old

upravíme soubor /usr/local/www/phpMyAdmin/config.inc.php
ee /usr/local/www/phpMyAdmin/config.inc.php

<?php


/* Servers configuration */
$i = 0;

/* Server 192.168.0.4 (config:root) [1] */
$i++;
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'heslo';

/* End of servers configuration */

$cfg['AllowAnywhereRecoding'] = false;
$cfg['DefaultCharset'] = 'iso-8859-2';
$cfg['RecodingEngine'] = 'iconv';
$cfg['IconvExtraParams'] = '//TRANSLIT';
? >


spustíme http://vas_server/phpmyadmin/index.php

Mysqladmin


Tento nástroj je dodávaný s MYSQL a slouží k provádění administrativních úkolů (vytváření DB, změna hesla). Mnoho z příkazů lze provést též pomocí SQL příkazů.

Syntaxe příkazu
mysqladmin [volby] -uJmeno -pHeslo příkaz1 příkaz2

Volby
-f příkazy jsou provedeny i v případě chyb
-i počet opakuje příkaz v intervalu x sekund (podle zadaného počtu). Program se pak ukončuje příkazem Ctrl+C.
-r při kombinaci s volbou "i" a příkazem "extended-status" zobrazí změnu od předchozího stavu
-E stjné jako předcházející, ale výsledek je na jediném dlouhém řádku
-t počet doba ve vteřinách po kterou se pokuší příkaz provést
-w počet pokusí se x krát navázat spojení k serveru


Příkazy
příkaz SQL dotaz popis
create JmenoDB CREATE DATABASE; vytvoří DB
drop JmenoDB DROP DATABASE; smaže DB
extended-status SHOW STATUS; vypíše stavové proměnné
flush-hosts FLUSH HOSTS; vyprázdní mezipamět
flush-logs FLUSH LOGS; uzavře logy a vytvoří nový logový soubor
flush-status FLUSH STATUS; vyresetuje stavové proměnné
flush-tables FLUSH TABLES; uzavře všechny otevřené tabulky
flush-threads vyprázdní mezipamět vláken
flush-privileges FLUSH-PRIVILEGES znovunačte databázi oprávnění
kill id1 id2... uzavře vybraná vlákna
password nové-heslo SET PASSWORD; nastaví nové heslo aktuálního uživatele
ping otestuje, zda je DB přístupná. Příkaz selže, pokud na vzdáleném stroji nemáte oprávnění přistupovat z aktuálního stroje
processlist SHOW THREADS; zobrazí otevřená vlákna
reload stejné jako flush-privileges
refresh zavře a znovu otevře všechny tabulky a soubor protokolů
shutdown ukončí činnost serveru MYSQL
start-slave , stop-slave spustí, nebo zastaví pobočný proces replikace
status zobrazí dílčí info o stavu serveru
varibles SHOW VARIABLES; zobrazí systémové proměnné serveru MYSQL
version vypíše verzi MYSQL





Mysqlshow


pomocí tohoto nástroje získáme souhrné informace o DB, tabulkách a sloupcích. Veškeré tyto informace lze získat i pomocí SQL příkazů.

syntaxe příkazu
mysqlshow -i -uJmeno -pHeslo jmenoDB jmenoTabulky jmenoSloupce

-i vypíše více podrobností
- samotný příkaz bez parametrů vypíše jaké jsou v MYSQL DB
- pokud uvedeme pouze jméno DB zobrazí info o dané DB
- pokud uvedeme za jméno DB i název tabulky, zobrazí info o dané tabulce
- pokud uvedeme za jméno DB ,název tabulky i jméno sloupce, zobrazí info o daném sloupci




Myisamchk


je nástroj pro kontrolu a opravu tabulek formátů MyISAM. Pracuje se soubory *.MYD a *.MYI. Parametrem je název *.MYI souboru s celo cestou.

syntaxe příkazu
myisamchk volby jmenoTabulky jmenoTabulky2


Volby pro analýzu
-c zkontroluje integritu souborů
-e zkontroluje integritu souborů, ale důkladněji
-F zkontroluje pouze tabulky , které nebyly správně zavřeny
-C zkontroluje tabulky , které byly změněny od předchozí kontroly
-f restartuje sám sebe se zapnutou volbou -r , pokud narazí na chybu
-i zobrazí statistické údaje o tabulkách
-m zkontroluje integritu pomaleji nž volba -c , ale rychleji než -e
-U pokud narazí na chybu, označí soubor jako poškozený
-T read only-nemění obsah souboru


Volby pro opravu - současně s parametry -r nebo -o
-B vytvoří záložní soubor *.bak
-e zkouší znovu vytvořit každý záznam, protože vzniká mnoho chyb, tak se nedoporučuje
-f přepíše dočasné soubory
-l nenásleduje symlinky
-o stejné jako -r , ale s jiným algoritmem
-q opraví pouze soubor indexu, soubor tabulek je nezměněn
-q -q stejné jako předcházející, ale soubor tabulek je nezměněn pokud nejsou hodnoty v klíčovém poli jedinečné
-r pokusí se opravit poškozené soubory
-t cesta pro dočasné soubory použije zadanou cestu
-u cesta dekomprimuje soubory, které byli ykomprimovány pomocí myisampack


Volby - ostatní
-a analyzuje a uloží distribuci klíčových polí v indexu
-A číslo použije pro sloupec AUTO INCREMENT počáteční hodnotu, která je o 1 vyšší než naposledz použitá, případně zadané číslo (podle toho, které je vyšší)
-d zobrazuje údaje o tabulce
-R seřadí záznamy v tabulce podle indexu- může to urychlit čtení z tabulek
-S seřadí bloky v indexovém souboru



Myisampack

je nástroj určený na kompresi tabulek. Dokáže je zmenšit i na polovinu a zrychlí se mnohdy přístup k datům.
syntaxe příkazu
myisampack volby jmenoTabulky jmenoTabulky2


Volby
-b vytvoří záložní soubor
-f zkomprimuje soubor i pokud by měl být větší než původní
-j spojí všechny tabulky do jednoho souboru. Všechny sloupce musejí být stejně definované
-t spustí nástroj pouze v testovacím režimu





Mysql query browser a Mysql Administrator


Jsou aplikace jak pro unix-like systémy, tak pro Windows. Umožnují graficky spravovat DB, provádět výběry, úpravy dat.
Stáhnout se nechají na

http://dev.mysql.com/downloads/gui-tools/5.0.html
Počet přístupů na stránky 1