InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou



Podobné dokumenty
Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Databázové systémy. Cvičení 6: SQL

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

KIV/ZIS cvičení 6. Tomáš Potužák

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

MySQL sežere vaše data

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Databázové systémy Cvičení 5.2

Databáze I. 5. přednáška. Helena Palovská

Databázové systémy Cvičení 5.3

PG 9.5 novinky ve vývoji aplikací

SQL - trigger, Databázové modelování

Databáze I. Přednáška 4

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Databázové systémy I

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Sada 1 - PHP. 14. Úvod do jazyka SQL

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Úvod do databázových systémů

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

MySQL. mysql> CREATE DATABASE nova CHARACTER SET latin2 COLLATE latin2_czech_cs; Query OK, 1 row affected (0.02 sec)

Verzování a publikace dat na webu za pomoci PostgreSQL

Semestrální práce z DAS2 a WWW

Jazyk SQL databáze SQLite. připravil ing. petr polách

6. SQL složitější dotazy, QBE

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Úvod do databázových systémů

8.2 Používání a tvorba databází

Text úlohy. Systémový katalog (DICTIONARY):

Databázové systémy, MS Access. Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1130_Databázové systémy, MS Access_PWP

Databázové systémy a SQL

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

5. POČÍTAČOVÉ CVIČENÍ

Databáze SQL SELECT. David Hoksza

DUM 12 téma: Příkazy pro tvorbu databáze

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

Základní přehled SQL příkazů

Informační systémy ve zdravotnictví. 10. cvičení

Databázové systémy Cvičení 5

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

KIV/ZIS - SELECT, opakování

6. blok část B Vnořené dotazy

Databázové systémy I

Databáze II. 2. přednáška. Helena Palovská

Databázové systémy a SQL

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

Marian Kamenický. Syntea software group a.s. marian.kamenicky. MFFUK Praha 2012/13

Databáze 2011/2012 T-SQL - kurzory, funkce. RNDr.David Hoksza, Ph.D.

Použití databází na Webu

Internetová filmová databáze IFDB

Zápisování dat do databáze

Mechanismus obarvení řádků browse

Maturitní témata z předmětu PROGRAMOVÉ VYBAVENÍ pro šk. rok 2012/2013

SQL. relační databázový systém. v úvodní kurz jazyka SQL

Max Communicator 9. Přístup do databáze a vyčítání hodnot měření externími aplikacemi

Osnova je orientační pro FIT, u FEKTu se dá předpokládat, že budou zohledněny předchozí znalosti studentů, kde většina s databází nikdy přímo

Databáze I. Přednáška 7

Kód v databázi. RNDr. Ondřej Zýka

Klíčová slova: dynamické internetové stránky, HTML, CSS, PHP, SQL, MySQL,

Databázové a informační systémy

PostgreSQL. Podpora dědičnosti Rozšiřitelnost vlastní datové typy. Univerzální nasazení ve vědecké sféře

Univerzita Pardubice. Fakulta elektrotechniky a informatiky SEMESTRÁLNÍ PRÁCE PRO PŘEDMĚT IDAS2

Virtual private database. Antonín Steinhauser

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Zabezpečení proti SQL injection

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Transakce a zamykání Jiří Tomeš

Kapitola 6: Omezení integrity. Omezení domény

NÁVRH A TVORBA HUDEBNÍ DATABÁZE

17. července :51 z moravec@yahoo.com

Úvod do databázových systémů

Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

PRŮBĚHOVÝ TEST Z PŘEDNÁŠEK

FIREBIRD relační databázový systém. Tomáš Svoboda

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

Střední odborná škola a Střední odborné učiliště, Hořovice

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

O Apache Derby detailněji. Hynek Mlnařík

Úvod do databázových systémů

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

- sloupcové integritní omezení

Oracle XML DB. Tomáš Nykodým

Jazyk SQL 3 - DML, DDL, TCL, DCL

Zabezpečení proti SQL injection

Informační systémy ve zdravotnictví. 6. cvičení

Co se stane po jeho vykonání? Vyberte libovolný počet možných odpovědí. Správná nemusí být žádná, ale také mohou být správné všechny.

Transkript:

MySQL Typy tabulek Storage Engines MyISAM defaultní, neumí transakce, umí fulltext InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) MEMORY (HEAP) v paměti; neumí transakce ARCHIVE velké množství dat bez indexů CSV v textovém souboru ve formátu hodnot oddělených čárkou FEDERATED v databázi na jiném serveru; místní server se připojí ke vzdálenému serveru a pomocí SQL čte nebo upravuje vzdálenou databázi MERGE (MRG_MYISAM) neumí transakce; práce s několika MyISAM tabulkami stejné struktury jakoby to byla jedna; umožňuje z takto spojené tabulky číst ale pro zápis musí mít tabulka nastaveno do které skutečné tabulky zapisovat BDB (BerkeleyDB) transakce; odstraněno ve verzi 5.1 EXAMPLE šablona pro vývojáře nových typů tabulek BLACKHOLE černá díra; data přijímá, vrací vždy prázdný výsledek ISAM původní; nahrazeno MyISAM Tabulky nepodporující transakce (MyISAM) jsou rychlejší, zabírají méně místa na disku a potřebují méně paměti pro UPDATE. MyISAM na data, z nichž se často vybírá pomocí SELECT a InnoDB na data, která se často mění. CREATE TABLE t (i INT) ENGINE = INNODB; ALTER TABLE t ENGINE = MYISAM; Místo ENGINE se dříve používalo TYPE a tento termín je zachován z důvodu zpětné kompatibility.

Indexy Zrychlení přístupu k datům. Používat u všech sloupců, podle kterých se vyhledává, třídí nebo podle kterých se spojují tabulky. Nepoužívat u tabulek, do kterých se převážně vkládá a jen výjimečně se z nich čte (např. logy). Běžný index. Unikátní index nedovolí do tabulky vložit více záznamů se stejnou hodnotou sloupce, nad kterým je index definován. Primární klíč označuje sloupec, který jednoznačně identifikuje libovolný záznam v tabulce; může být jen jeden v tabulce. Transakce Transactions Provedení několika činností dohromady jako jedné. Nelze provést jen část transakce se vždy musí provést celá nebo vůbec. Když je potřeba v půlce skončit, musí se vrátit všechny dosavadní změny. START TRANSACTION Zahájí neboli odstartuje transakci. Veškeré příkazy zadané později jsou součástí transakce a navenek se tedy budou jevit jako jediný příkaz. COMMIT Aktuální transakce je potvrzena. Změny jsou zapsány do databáze. ROLLBACK Aktuální transakce je zamítnuta. Všechny provedené změny jsou zrušeny a databáze se vrátí do stavu, v němž byla před zahájením transakce. START TRANSACTION; UPDATE platy SET plat=plat+2000 WHERE plat < 15000;

UPDATE platy SET plat=plat*1.1; COMMIT; Při použití InnoDB je transakce každý samostatný příkaz. Tzn. okolo transakce složené z jednoho příkazu není třeba psát START TRANSACTION a COMMIT. SELECT * FROM cosi; Předchozí příkaz provede ve skutečnosti toto: START TRANSACTION; SELECT * FROM cosi; COMMIT; Během provádění transakce všechny ostatní pokusy o práci nad stejnými daty čekají. Cizí klíče Foreign keys V databázi máme následující tabulky: osoby se sloupci osoba_id a jméno psi se sloupci pes_id, majitel a rasa Každý záznam psa má uvedené id majitele. Proto označíme v tabulce psi sloupec majitel jako cizí klíč, vztažený k sloupci osoba_id v tabulce osoby. Když je poté přidán záznam pro psa, databázový engine bude vyžadovat, aby číslo v poli majitel nabývalo některé z existujících hodnot osoba_id tabulky osoby. Zároveň můžeme určit, zda se při smazání osoby smažou i záznamy všech vlastněných psů, nebo zda má pokus o smazání osoby vlastnící alespoň jednoho psa selhat. Nastavení v phpmyadmin pod odkazem Zobrazit relace na stránce struktury tabulky. Tabulka musí být typu InnoDB. ALTER TABLE psi ADD FOREIGN KEY(majitel)

REFERENCES osoby(osoba_id) ON UPDATE CASCADE # změna id chovatele = změna i u všech jeho psů # RESTRICT zabránění změně id chovatele ON DELETE RESTRICT; # chovatel nemůže být smazán pokud má nějaké psy # CASCADE smazání chovatele = smazání i jeho psů # SET NULL nastaví majitele na NULL Pohledy Views Statické dotazy, s nimiž lze pracovat, jako by to byly tabulky (Pojmenované SELECTy). V MySQL od verze 5.0. CREATE VIEW vwpracovnici AS SELECT * FROM pracovnici; SELECT * FROM vwpracovnici; CREATE VIEW vwprumernyvek AS SELECT AVG(vek) AS prumer FROM pracovnici; CREATE VIEW vwdobneurc AS SELECT * FROM pracovnici WHERE zam_do IS NULL; CREATE VIEW vwlidi AS SELECT prijmeni FROM pracovnici ORDER BY prijmeni; PhpMyAdmin zobrazí existující pohledy v seznamu tabulek. Spojování tabulek SELECT * FROM knihy, druhy; Každý řádek s každým spojeny na jednom řádku kartézský součin. Ke každé knize všechny druhy, které existují. My ale chceme knihu a její druh na jednom řádku. Vybereme tedy řádky kde druh z tabulky knihy se rovná id z tab. druhy. SELECT * FROM knihy, druhy WHERE knihy.druh = druhy.id; SELECT * FROM knihy INNER JOIN druhy ON knihy.druh = druhy.id [WHERE ORDER BY ]; K výpisu i knih, které nemají nastavený druh (vypíše všechny z levé tabulky podle LEFT/RIGHT a k nim přiřadí z té druhé podle výrazu): FROM knihy LEFT JOIN druhy ON knihy.druh = druhy.id; FROM druhy RIGHT JOIN knihy ON knihy.druh = druhy.id; 2 totéž.

Poddotazy Subqueries SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); SELECT * FROM lidi WHERE mesto IN (SELECT mesto FROM mesta); Uložené procedury Stored procedures Sada příkazů SQL, které jsou uložené na serveru a zkompilované pro rychlejší použití. V MySQL od verze 5.0. CREATE PROCEDURE spvratradky (od INT, do INT) SELECT * FROM software WHERE id BETWEEN od AND do; CALL spvratradky(10, 20) Při opakovaném spuštění bude následující příkaz cca o 25-30% rychlejší než prostá sada INSERTů. create procedure sp_vlozradek(id INT, nazev VARCHAR(50)) INSERT INTO software (id, nazev) VALUES (id, nazev); CREATE PROCEDURE sp_vlozneboaktualizuj (radek INT, novynazev VARCHAR(50)) IF EXISTS(SELECT * FROM software WHERE id = radek) THEN UPDATE software SET nazev = novynazev WHERE id = radek; ELSE INSERT INTO software (id, nazev) VALUES (radek, novynazev); IF; CREATE PROCEDURE spkalendar() DECLARE den DATE;

SET den = CURDATE(); CREATE TEMPORARY TABLE dny (datum DATE); WHILE den < (CURDATE() + INTERVAL 30 DAY) DO INSERT INTO dny (datum) VALUES (den); SET den = den + INTERVAL 1 DAY; WHILE; SELECT datum FROM dny; Nejprve je vytvořena prázdná dočasná tabulka a je zjištěno dnešní datum. Pak je ve smyčce WHILE přičteno postupně 30 dnů a výsledky jsou průběžně ukládány do dočasné tabulky. Nakonec je obsah této dočasné tabulky vrácen jako výsledek. Trigger Uložená procedura, která se spouští v souvislosti (před nebo po) s provedením nějakého akčního dotazu (UPDATE, DELETE,..., ne SELECT) na tabulce. Nic nevrací a nemá parametry. CREATE TRIGGER trbackup BEFORE DELETE ON tabulka FOR EACH ROW INSERT INTO tabulka_zaloha(id, jmeno, plat, cas_odstraneni, uzivatel) VALUES (old.id, old.jmeno, old.plat, NOW(), USER()); ; Možné akce: BEFORE/AFTER INSERT/UPDATE/DELETE Pro každou akci nejvýše jeden trigger, každý trigger pouze pro jednu akci. Triggery mají přístup k měněným datům přes virtuální tabulky old a new. CREATE TRIGGER trmaxplat BEFORE INSERT ON tabulka FOR EACH ROW

IF new.plat>30000 THEN /*něco, co akci zruší*/; IF; ; Bohužel pro něco, co akci zruší neexistuje žádný příkaz, je třeba vyvolat nějakou chybu. Uživatelsky definované funkce UDF CREATE FUNCTION mesicslovy (mesic TINYINT) RETURNS VARCHAR (9) RETURN CASE mesic WHEN 1 THEN 'ledna' WHEN 2 THEN 'února'... WHEN 12 THEN 'prosince' ; Zdroje MySQL 5.0 Reference Manual Seriál MySQL na Linuxsoft.cz PHP triky