Motivace Vlastnosti Architektura a zpracovatelé Instalace a konfig. instance MySQL Způsoby práce s MySQL Datové typy Jazyk pro definici dat - JDD Jazyk pro modifikaci dat - JMD Import dat Administrace, Odkazy
Rychlý, spolehlivý a bezpečný, jednoduchý Cena? › MySQL Enterprise basic €479 /Server/Year Vývojové nástroje Dobrá dokumentace Množství uživatelů Pokračující vývoj Různé platformy- přenositelnost Bezpečnost
Je to relační SŘBD Je otevřený (používat a modifikovat) - the GPL (GNU General Public License) Multivláknový SQL server, který podporuje různé koncové zpracovatele, několik různých klientských programů, knihoven, administrativní nástroje, a hodně programových prostředí (APIs) architektura client-server or embeded
APIs for C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, and Tcl Lokalizace – chybová hlášení, podporuje různé znakové sady – i pro třídění a po- rovnávání
Od verze 5.0 podporuje › Uložené procedury (stored procedures) › Pohledy (views) › Kurzory (cursor) › Transakce › Triggery (spouštěče) Zpracovatel Innodb - poskytuje kompletní ACID transakce (atomic, consistent, isolated, durable) s potvrzování transakcí, rollback, crash recovery... referenční integrita
Connectors : Native C API, JDBC, ODBC,.NET, PHP, Python, Perl, Ruby, VB Management Services & Utilities Backup & Reco- very, Security, Replication, Cluster, Adminnistration, Configuration,Mig -ration & Meta- data Connection pool Authentication, Thread Reuse, Connection Limits, Check Memory, Caches SQL Interface DDL, DML, uložené proc., pohledy, triggery Parser Query translation, Object privilege Optimizer Access Paths, Statistics Caches& Buffers Storage Engines Memory, Index & Storage Management MyISAM InnoDB ArchiveFederatedMemoryMergeClusterBDB File System NTFS - NFS, SAN - NAS Files & Logs MySQL Servers
MyISAM : každá MyISAM tabulka je uložena ve 3 souborech.frm (table format),.MYD (data),.MYI (indexy), uloží 2 32 vět, max. 64 indexů v tabulce - index spotřebovává disk. prostor - (key_length+4)/0.67, spočteno za všechny indexy. Podporuje fultextové vyhledávání. InnoDB : umožňuje transakce, definovat cizí klíče – vhodný pro velké databáze s velkým množstvím přístupů Federated : pro zpracování dat na vzdálených serverech
MySQL 5.1 je současná verze (Release Candidate release). MySQL 5.0 je současná stabilní (stable production- quality - Generaly available) verze. Při instalaci z bin. balíčku s instalátorem › vyberete typ instalace(Typical, Complete, Custom) a spustíte instalaci › instalátor nastaví registry › změní menu Start › vytoří adresář. strukturu MySQL v Program Files a nakopíruje soubory
› Vyberete typ konfigurace (detailní, standardní) › Vyberete typ serveru (pro vývoj (min. memo), server (medium), dedicated server (všechnu paměť pro mysql) › Zvolíte použití databáze (vícefunkční, transakční aplikace, bez transakcí)... › Nakonec zadáte heslo správce
1. MySQL Command Line Client (CLC) 2. Dávkové zpracování dat 3. Mysql Administrator 4. Query Browser 5. phpMyAdmin 6. Příkazy v hostitelském jazyce 7....
příkazový řádek
Proč dávkové zpracování? Opakované pravidelné jetí skriptů Jednodušší úprava překlepu Distribuce skriptů shell>mysql -h host -u user -p < script.sql Enter password: ******** Postupné prohlížení dlouhých výstupů shell> mysql < script.sql | more Uložení výstupu do souboru shell> mysql mysql.out -v -v -v … zobrazí i vykonávané příkazy ve výstupu -t … stejný formát výstupu jako u interaktivního módu
Soubor.php... <? $spo = mysql_pconnect("server","user","heslo"); if ( !$spo ){ echo "\n Chyba: Nepodařilo se připojení k databázovému serveru\n"; exit(); } $db = mysql_select_db("jméno_databaze"); if ( !$db ) { echo "\n Chyba: Nepodařilo se vybrat databázi\n"; exit(); } $rec = mysql_query("SELECT * FROM ucitel WHERE jmeno <> '' ORDER BY prijmeni"); if( !$rec ) { echo "\n Chyba: ",MySQL_Error(),"\n"; exit(); } $n = mysql_num_rows($rec); if( $n == 0 ) { echo " Nevybrala se zadna veta! \n"; exit(); } ?>...
Katedra Jméno Telefon Místnost Zrušení Opravení katedra ?> prijmeni $r->jmeno"; ?> telefon \n"; mistnost ?> id', '$r->prijmeni"; ?>')">Zrušit id ?>"> Opravit
BIT [(length)] TINYINT [(length)] SMALLINT [(length)] MEDIUMINT [(length)] INT [(length)] INTEGER [(length)] BIGINT [(length)] REAL [(length,decimals)] DOUBLE [(length,decimals)] FLOAT [(length,decimals)] DECIMAL (length,decimals) NUMERIC (length,decimals) DATE | TIME | TIMESTAMP DATETIME | YEAR CHAR (length) VARCHAR (length) BINARY (length) VARBINARY (length) TINYBLOB | BLOB MEDIUMBLOB LONGBLOB TINYTEXT | TEXT MEDIUMTEXT | LONGTEXT ENUM (value1,value2,value3,...) SET (value1,value2,value3,...)
CREATE TABLE test.pobocka ( ono char(1) NOT NULL PRIMARY KEY, address varchar(35), city varchar(15),... ); INSERT INTO test.pobocka VALUES('A','Ostrava'); INSERT INTO test.pobocka VALUES('B','Brno'); CREATE TABLE test.zakaznik ( cno char(5) NOT NULL PRIMARY KEY, company varchar(35),... address varchar(30), ono char(1) REFERENCES pobocka,... ); INSERT INTO test.zakaznik VALUES('A1234','VSB Ostrava','A'); INSERT INTO test.zakaznik VALUES('B1111','VSB Ostrava- Poruba','B'); INSERT INTO test.zakaznik VALUES('C2222','Ostravska Univerzita','C'); Funguje jako poznámka - nedělá nic !!!
mysql> show create table zakaznik\G // vypis definice tabulky *************************** 1. row *************************** Table: zakaznik Create Table: CREATE TABLE `zakaznik` ( `cno` char(5) NOT NULL, `company` varchar(35) default NULL, `ono` char(1) default NULL, PRIMARY KEY (`cno`), KEY `FK_pobocka` (`ono`), CONSTRAINT `FK_pobocka` FOREIGN KEY (`ono`) REFERENCES `pobocka` (`ono`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec) mysql> INSERT INTO test.zakaznik VALUES('A1234','VSB Ostrava','A'); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO test.zakaznik VALUES('B1111','VSB Ostrava-Poruba','B'); Query OK, 1 row affected (0.03 sec) mysql> INSERT INTO test.zakaznik VALUES('C2222','Ostravska Univerzita','C'); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test/zakaznik`, CONSTRAINT `FK_pobocka` FOREIGN KEY (`ono`) REFERENCES `pobocka` (`ono`) Zpracovatel Innodb
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name,...) REFERENCES tbl_name (index_col_name,...) [ON DELETE {RESTRICT |CASCADE |SET NULL |NO ACTION}] [ON UPDATE {RESTRICT |CASCADE |SET NULL|NO ACTION}] Tabulky musí existovat, blob a text nelze definovat jako cizí klíče Nedovolí vložit/aktualizovat větu s hodnotou, která není v hlavní tabulce RESTRICT(NO ACTION)- nedovolí smazat/aktualizovat záznamy v hlavní tabulce, když existují závislé věty - default CASCADE - automaticky smaže věty, či aktualizuje hodnoty klíče odpovídajících vět v závislé tabulce SET NULL - smaže nebo aktualizuje větu v hlavní tabulce a hodnoty cizího klíče v závislé tabulce nastaví na null.
CREATE VIEW jm_pohledu(atr1, atr2,...) AS select..... select nesmí obsahovat - poddotaz za FROM, odkaz na systémovou nebo uživ. proměnnou, odkaz na temporary tabulku apod. atr1, atr2 - případné přejmenování sloupců SHOW CREATE VIEW SELECT * FROM jm_pohledu
2) drop trigger vyplog; DELIMITER | CREATE TRIGGER vyplog BEFORE INSERT ON lidi FOR EACH ROW BEGIN = SUBSTR(NEW.PRIJMENI, 1, 3); select max(substr(login, 4, 3)) from lidi where substr(prijmeni, 1, 3) ; = 0)+1; = 3, '0'); SET NEW.LOGIN END; | DELIMITER ; 3) INSERT INTO lidi VALUES(null,'a','Jarda ','Novotny'); 1) Create table lidi ( id int(10) not null primary key auto_increment, login varchar(8) not null, jmeno varchar(20) not null, prijmeni varchar(30) );
-- příklad jednoduché procedury drop procedure simpleproc; delimiter // CREATE PROCEDURE simpleproc (OUT param1 INT) BEGIN SELECT COUNT(*) INTO param1 FROM zakaznik; END; // delimiter ; CALL | | 2 |
load.sql load data local infile 'C:\\MySQL-obchod\\faktury3.txt' into table faktura fields terminated by ',’ enclosed by '\"' lines terminated by '\r\n' ignore 1 lines; Faktury3.txt … ino,cno,idate,itotal,salesman 1054,"C8934", , ,"647" 1055,"P8438", ,604.91,"667" 1056,"M9916", , ,"434" 1057,"Q7813", ,35.09,"667" 1058,"T1401", ,121.48,"281" 1059,"Z2361", , ,"271"
-- vytvoreni uzivatele a databaze stejneho jmena CREATE USER IDENTIFIED BY ‘heslo' ; GRANT USAGE ON *. * TO ' user IDENTIFIED BY ‘heslo‘ WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; CREATE DATABASE IF NOT EXISTS `user` ; GRANT ALL PRIVILEGES ON `user`. * TO GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON `test`. * TO
stránky J. Koska Instalace php, MySQL, Apache, vertrigoserv.sourceforge.net