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;

poznámka