něco o mně | fotogalerie | guestbook | download |

MySQL - praktická nápověda

Tato stránka je určena především začátečníkům, nicméně si myslím, že i pokročilejší zde třeba objeví něco zajímavého. K dispozici jsou některé základní syntaxe a ukázky kombinování příkazů, dále pak několik univerzálnějších tipů vhodných k dalšímu rozvíjení. Pokud jste zde nenalezli řešení vaší momentální situace, můžete se na mne obrátit. Bude-li to v mých silách, rád pomohu. Zrovna tak máte-li něco, o co byste se rádi podělili, budu rád za zaslání.




Založení nové databáze:
CREATE DATABASE IF NOT EXISTS jméno_databáze;

Odstranění databáze:
DROP DATABASE IF NOT EXISTS jméno_databáze;

Nastavení aktivní databáze:
USE jméno_databáze;

Vytvoření tabulky:
CREATE TABLE IF NOT EXISTS jméno_tabulky ...

Odstranění tabulky:
DROP TABLE IF NOT EXISTS jméno_tabulky;

Výpis duplicit v daném sloupci:
SELECT * GROUP BY sloupec HAVING COUNT(sloupec)>1;

Získání struktury tabulky:
SHOW CREATE TABLE jméno_tabulky;
EXPLAIN jméno_tabulky;
DESCRIBE jméno_tabulky;
SHOW FULL COLUMNS FROM jméno_tabulky;

Kopie tabulky do jiné (pouze základní struktura, bez indexů):
CREATE TABLE nová_tabulka LIKE vzorová_tabulka;

Verze MySQL databáze:
SELECT VERSION();

Výpis vlastností tabulek:
SHOW TABLE STATUS;
SHOW TABLE STATUS FROM jméno_DB LIKE 'c_%';

Všechny záznamy obsahující:
SELECT * FROM jméno_tabulky WHERE sloupec LIKE '%řetězec%';

Všechny záznamy obsahujících ‘a’ na třetim místě:
SELECT * FROM jméno_tabulky WHERE sloupec LIKE '__a%';

Všechny vyhovující záznamy, s ohledem na velikost písmen:
SELECT * FROM jméno_tabulky WHERE sloupec LIKE BINARY '%<BR>%';

Všechny záznamy začínající písmeny ‘W’ nebo ‘B’:
SELECT * FROM jméno_tabulky WHERE sloupec LIKE '[WB]%';

Všechny záznamy začínající písmeny W-B a končící net:
SELECT * FROM jméno_tabulky WHERE sloupec LIKE '[W-B]net';

Všechny záznamy začínající ‘W’, nikoli však s ‘B’ na druhém místě:
SELECT * FROM jméno_tabulky WHERE sloupec LIKE 'W[^B]%';

Výběr s podmínkou na sloupec typu SET:
SELECT * FROM jméno_tabulky WHERE FIND_IN_SET('Ano',sloupec);

Všechny záznamy seřazené náhodně:
SELECT * FROM jméno_tabulky ORDER BY RAND();

Vypíše všechny řádky, které mají v daném sloupci stejnou hodnotu:
SELECT * FROM jméno_tabulky T1 LEFT OUTER JOIN jméno_tabulky T2 ON T1.sloupec=T2.sloupec
  WHERE T1.sloupec=T2.sloupec AND T1.id<>T2.id;

Výsledkem jsou takové řádky, jejiž thread se odkazuje na neexistující id:
SELECT * FROM jméno_tabulky T1 LEFT OUTER JOIN jméno_tabulky T2 ON T1.thread=T2.id
  WHERE T1.thread<>0 AND T2.id IS NULL;

Součet hodnot včetně možných NULL výskytů:
SELECT IFNULL(sloupec1,0)+IFNULL(sloupec2,0)+IFNULL(sloupec3,0) FROM jméno_tabulky;

Zkopírování obsahu tabulky:
INSERT INTO jméno_cílové_tabulky SELECT * FROM jméno_zdrojové_tabulky;

Zkopírování tabulky (struktury i dat), bez klíčů a indexů:
CREATE TABLE nová_jméno_tabulky SELECT * FROM jméno_zdrojové_tabulky;

Přejmenování tabulky:
ALTER TABLE původní_jméno_tabulky RENAME nové_jméno_tabulky;

Odebrání sloupce z tabulky:
ALTER TABLE jméno_tabulky DROP název_sloupce;

Odebrání indexu tabulky:
ALTER TABLE jméno_tabulky DROP INDEX jméno_indexu;

Změna typu tabulky:
ALTER TABLE jméno_tabulky type=InnoDB;

Změna komentáře tabulky:
ALTER TABLE jméno_tabulky COMMENT='libovolný popis';

Vytvoření jedinečného indexu:
ALTER TABLE jméno_tabulky ADD UNIQUE sloupec (sloupec);

Výpis konfigurace serveru:
SHOW VARIABLES;
SHOW VARIABLES LIKE 'have_%';

Znovu založení lokálního uživatele s přístupem ke všem tabulkám v db:
REVOKE ALL PRIVILEGES ON *.* FROM "uzivatel"@"localhost";
DELETE FROM db WHERE User = "uzivatel";
DELETE FROM user WHERE User = "uzivatel";
FLUSH PRIVILEGES;

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER ON db.* TO 'uzivatel'@'localhost' IDENTIFIED BY 'heslo';

Výpis klíčů tabulky:
SHOW INDEX FROM jméno_tabulky;

Zobrazení práv uživatele:
SHOW GRANTS FOR uživatel;

Nastavení hesla existujícímu uživateli:
SET PASSWORD FOR uživatel = PASSWORD('heslo');

Uzamknutí tabulky:
LOCK TABLES jméno_tabulky WRITE, název_další_tabulky READ;
  WRITE – ostatním zakázán zápis i čtení, READ – povoleno pouze čtení.
LOCK TABLES jméno_tabulky LOW_PRIORITY WRITE;
  LOW_PRIORITY – veškeré požadavky budou mít vyšší prioritu než výhradní přístup.

Zrušení zámku tabulky:
UNLOCK TABLES;
UNLOCK TABLE jméno_tabulky;

Úprava záznamu:
UPDATE jméno_tabulky SET sloupec='hodnota' WHERE sloupec='hodnota';

Změna všech záznamů v tabulce, jejichž velikost je menší 3:
UPDATE jméno_tabulky SET sloupec='?' WHERE LENGTH(sloupec)<3;

První písmeno každého záznamu na velké:
UPDATE jméno_tabulky SET sloupec=CONCAT(UPPER(LEFT(subject,1)),SUBSTRING(subject,2));

Odebrat mezery z levé i pravé strany:
UPDATE jméno_tabulky SET sloupec=TRIM(sloupec);

Nahradí zalomení řádku mezerou:
UPDATE jméno_tabulky SET sloupec=REPLACE(sloupec,'\r\n',' ');

Nové vytvoření tabulky s původními údaji – pro návaznost pole auto_increment:
DROP TABLE IF EXISTS tmp_jméno_tabulky;
CREATE TABLE tmp_jméno_tabulky ...
INSERT INTO tmp_jméno_tabulky SELECT * FROM původní_jméno_tabulky;
DROP TABLE původní _jméno_tabulky;
ALTER TABLE tmp_jméno_tabulky RENAME původní_jméno_tabulky;

Vytvoření indexu pro fulltextové vyhledávání:
CREATE FULLTEXT INDEX jméno_indexu ON jméno_tabulky (sloupec);

Full-text vyhledávání:
SELECT id_záznamu,MATCH(fulltext_sloupec) AGAINST('hledaný_výraz') FROM jméno_tabulky;

Full-text vyhledávání, vypisují se jen vyhovující záznamy:
SELECT id_záznamu,MATCH(fulltext_sloupec) AGAINST('hledaný_výraz') AS score FROM jméno_tabulky
  WHERE MATCH(message) AGAINST('hledaný_výraz') ORDER BY score DESC;

Př.: všechny záznamy začínající 're: ', jejiž následné písmeno není v tozsahu A-Z:
SELECT id_záznamu,sloupec FROM jméno_tabulky WHERE sloupec LIKE 're: %' AND
  (ORD(SUBSTRING(sloupec,5,1))<65 OR ORD(SUBSTRING(sloupec,5,1))>90);

U vyhovujících záznamů převede pátý znak na velké písmeno:
UPDATE jméno_tabulky SET sloupec = CONCAT(LEFT(sloupec,4),UPPER(SUBSTRING(sloupec,5,1)),
  SUBSTRING(sloupec,6)) WHERE sloupec LIKE 're: %';

Převod na unixtime (yyyy-mm-dd hh:mm:ss):
SELECT UNIX_TIMESTAMP('2002-10-10 00:04:00');

Násobná podmínka při výběru:
SELECT * FROM jméno_tabulky WHERE sloupec='řetězec1' OR sloupec='řetězec2' OR sloupec ='řetězec3';
SELECT * FROM jméno_tabulky WHERE sloupec IN ('řetězec1','řetězec2','řetězec3');

Výběr řádků s omezením na rozpětí data:
SELECT * FROM jméno_tabulky WHERE datum BETWEEN '2005-01-01' AND '2005-02-01';

Zjištění průměrné délky hodnoty:
SELECT ROUND(AVG(LENGTH(název_sloupce))) FROM jméno_tabulky;

Převod hodnot na malá písmena:
UPDATE jméno_tabulky SET sloupec=LOWER(sloupec);

Test přítomnosti příznaku v poli typu enum:
SELECT * FROM jméno_tabulky WHERE FIND_IN_SET("E",flags);

Zjednodušená kontrola validity IP adres:
SELECT ip FROM jméno_tabulky WHERE ip NOT REGEXP "^([0-9]{1,3}\.){3}[0-9]{1,3}$";

Ověření správnosti emailu podle příslušného RFC:
SELECT email FROM jméno_tabulky WHERE LENGTH(email)>0 AND email NOT
  REGEXP "^[-a-zA-Z0-9!#$%&'*+/=?^_`{|}~]+(\.[-a-zA-Z0-9!#$%&'*+/=?^_`{|}~]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$";