MySQL - praktická nápovědaTato 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-]+)+$"; |