Servery MySQL pro DZS (v provozu jen občas!):
147.32.162.175 (pomocný)
147.32.164.26 (hlavní)
Postup připojení pro MySQL a klienta "Micka"
Každému studentovi byl vytvořen uživatelský účet a databáze (takto), studentům byly tyto údaje sděleny. Je třeba je vyplnit pro připojení do vhodného klienta - pro uživatele Micky nabízíme postup.
Výběr databáze
provedeme poklepáním na databázi, takže příkaz
use <databasename>
není třeba.
Důležité
letos vytváříme hesla, která vyžadují jejich okamžitou změnu. Provedeme to příkazem:
SET PASSWORD=PASSWORD('nové heslo');
Zadávání příkazů SQL
Okno otevřeme klávesovou zkratkou ctrl+K, nebo z menu, nebo ikonkou.
Příklad vytvoření tabulky:
CREATE TABLE clenove_rodiny ( kdo VARCHAR (6) NOT NULL PRIMARY KEY, jmeno VARCHAR(30), vycerpal FLOAT (9,2) ); CREATE TABLE rodinny_rozpocet ( datum DATE, kdo VARCHAR(6), polozka VARCHAR(20), prijem FLOAT (9,2), vydej FLOAT(9,2) );
typy proměnných: float - plovoucí čárka, celkem 9 míst
včetně desetinné čárky, dvě za ní;
varchar - text o proměnné délce, max. délka uvedena (char -
pevná délka); date - datum.
Další datové typy - viz např. zde (nebo použijte Google).
Tabulky vyplníme příkazy:
INSERT INTO clenove_rodiny VALUES ( 'otec', 'Jan Novak', 0 ); INSERT INTO clenove_rodiny VALUES ( 'matka', 'Marta Novakova', 0); INSERT INTO clenove_rodiny VALUES ( 'mirek', 'Mirek Novak', 0); INSERT INTO clenove_rodiny VALUES ( 'zuzka', 'Zuzka Novakova', 0); INSERT INTO rodinny_rozpocet VALUES ( SYSDATE(),'otec', 'sako',0,5000); INSERT INTO rodinny_rozpocet VALUES ( SYSDATE(),'matka','darek',0,500); INSERT INTO rodinny_rozpocet VALUES ( SYSDATE(),'mirek', 'hracka',0, 70); INSERT INTO rodinny_rozpocet VALUES ( SYSDATE(),'zuzka', 'hra', 0, 120);
SYSDATE v zásadě vrátí totéž, co CURDATE.
poznámky
- ověřeno na serveru lenka.fsid.cvut.cz,
- většina návodu pro Oracle funguje, ale nezapomínejte uvádět správné apostrofy (jsou jen na anglické klávesnici), a ne uvozovky; funkce (sysdate, curdate) musí mít za sebou alespoň prázdné závorky.
Autoinkrementace
Často se vyskytující ID položky, sloužící navíc i jako primární klíč, mívá vlastnost AutoIncrement. Pokud se jeho hodnota při zadávání dat nezadá, vyplní se sama - tak, že projde tabulku, najde největší číslo, a vyplní se hodnotou ještě o jednočku větší. Například zaměstnanci podniku:
CREATE TABLE zamestnanci
(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
jmeno VARCHAR(30),
login CHAR (9)
);
Pro vyplnění jen vybraných polí musíme zadat, která vyplňujeme:
INSERT INTO zamestnanci (jmeno,login) VALUES ( 'Novák',
'novak' );
INSERT INTO zamestnanci (jmeno,login) VALUES ( 'Pokorný',
'pokorny' );
INSERT INTO zamestnanci (jmeno,login) VALUES ( 'Houska', 'houska'
);
Zaměstnanec Pokorný podal výpověď, na jeho místo nastoupil Rychlý:
DELETE FROM zamestnanci WHERE jmeno='Pokorný';
INSERT INTO zamestnanci (jmeno,login) VALUES ( 'Rychlý', 'rychly' );
Po smazání druhého řádku je dvojka volná, ale ID u nového zaměstnance se nastaví na čtyřku. Pokud tedy u záznamů máme uvedeno, kdo například vystavil fakturu, pak nám systém na dotaz po ID=2 bude odpovídat něco ve smyslu N/A nebo NULL. Většinou je to tak správně - kdyby odpovědnost připadla celému oddělení, bylo by logické u každé objednávky vést i údaj, o jaké oddělení jde. Jiné řešení je v KOS u studentů - žádný řádek se nesmaže, ale u každého studenta je položka "studuje" v rozsahu SMALLINT, která musí obsahovat jedničku, jinak záznam databáze povětšinou ignoruje (například nenabídne možnost takovému studentu udělit zápočet).
z manuálu:
SELECT * FROM table1,table2 WHERE table1.id=table2.id; SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id; SELECT * FROM table1 LEFT JOIN table2 USING (id); SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id LEFT JOIN table3 ON table2.id=table3.id; SELECT * FROM table1 USE INDEX (key1,key2) WHERE key1=1 AND key2=2 AND key3=3; SELECT * FROM table1 IGNORE INDEX (key3) WHERE key1=1 AND key2=2 AND key3=3;