MySql – úvod MySql je multiplatformní databázový systém (server a klient). Je napsán v C a C++. Ke stažení je na www.mysql.com pro různé platformy, ve.

Slides:



Advertisements
Podobné prezentace
Pro začátek něco lehčího
Advertisements

Přístup k databázím z WWW
Přednáška 11 Jiří Šebesta
SQL: DDL v ORACLE CREATE TABLE jméno_tabulky (atribut datový_typ [DEFAULT][attribut_constraint] [, atribut datový_typ [DEFAULT] [attribut_constraint]],...
Návrh a tvorba WWW Přednáška 6 PHP II – Databáze.
Fakulta elektrotechniky a informatiky
Programování v Pascalu Přednáška 9 RNDr. Hana Havelková.
Informační systémy Realizace uložených procedur a spouští, jejich praktické využití.
Informační systémy Realizace sběru dat v rámci realizovaných úloh.
Informatika pro ekonomy II přednáška 11
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
Radek Špinka Přepínače MSSQL výběr.
PHP a MySQL Připojení k databázi:
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
Procedurální rozšíření Transact SQL Michal Kopecký Výběr ze slajdů k 3. přednášce předmětu Databázové Aplikace (DBI026) na MFF UK.
Aplikační a programové vybavení
Jiří Karpeta Platform Strategy Advisor Microsoft Czech Republic
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
Jméno autora: Mgr. Olga Bayerlová Datum vytvoření: Číslo DUMu: VY_32_INOVACE_04_AJ1G Ročník: I. Anglický jazyk Vzdělávací oblast: Jazyk a jazyková.
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Heterogenní serverové prostředí, správa, bezpečnost a interoperabilita Jak zajistit interoperabilitu v hererogenním serverovém prostředí? Jak spolupracuje.
Aplikační a programové vybavení
By Dagmar Machů Škola: SOU Val. Klobouky Ročník: třetí Obor: Kuchař/číšník Název projektu: Zkvalitnění výuky prostřednictvím ICT Předmět: Anglický jazyk.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
OSNOVA: a) Příkazy pro větvení b) Příkazy pro cykly c) Příkazy pro řízení přenosu d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Číslo projektuCZ.1.07/1.5.00/ Číslo materiáluVY_32_INOVACE_178 Název školyGymnázium, Tachov, Pionýrská 1370 Autor Mgr. Eleonora Klasová Předmět.
ŠKOLA: Gymnázium, Tanvald, Školní 305, příspěvková organizace ČÍSLO PROJEKTU: CZ.1.07/1.5.00/ NÁZEV PROJEKTU: Šablony – Gymnázium Tanvald ČÍSLO.
1 © 2004 Cisco Systems, Inc. All rights reserved. CCNA 2 v3.1 Module 11 Access Control Lists (ACLs)
Číslo projektu CZ.1.07/1.5.00/ Číslo materiálu VY_32_INOVACE_ 007 Název školy Gymnázium, Tachov, Pionýrská 1370 Autor Mgr.Stanislava Antropiusová.
Dynamic SQL P. Částek. Dynamic SQL Embedded SQL je překládaný preprocesorem => za běhu nelze nechat uživatele rozhodovat o vzhledu samotných SQL příkazů.
Úvod do PHP IZI 228.
First Conditional – tvar a použití Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Romana Petrová. Dostupné z Metodického portálu
Základní obeznámení s jazykem SQL Databázové systémy.
Internet Explorer 8 Štěpán Bechynský Developer Evangelist Microsoft s.r.o.
The written part of the maturita exam III Škola: SOU Valašské Klobouky Ročník: Nástavbové studium Podnikání 2 Název projektu: Zkvalitnění výuky prostřednictvím.
Pracovní list - pro tisk Vloženo z stress.pptx Začátek.
Databázové Aplikace Slidy ke cvičení DBI026, část 3 KSI MFF UK Verze
Jak postupujeme vpřed v testování? Jak se nám daří vytvářet denní buildy? Stíháme opravovat chyby? Jak kvalitně chyby opravujeme?
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Číslo projektuCZ.1.07/1.5.00/ Číslo materiáluVY_32_INOVACE_019 Název školyGymnázium, Tachov, Pionýrská 1370 Autor Mgr. Stanislava Antropiusová Předmět.
y.cz Název školyStřední odborná škola a Gymnázium Staré Město Číslo projektuCZ.1.07/1.5.00/ AutorMgr. Roman Chovanec Název šablonyIII/2.
Translation Translate the following sentences from English into Czech. Vzor: I don’t like the translation of this book. Who translated it? Nelíbí se mi.
Název a adresa školy: Střední odborné učiliště stavební, Opava, příspěvková organizace, Boženy Němcové 22/2309, Opava Název operačního programu:
Tutorial: Obchodní akademie Topic: Logical Functions Prepared by: Mgr. Zdeněk Hrdina Projekt Anglicky v odborných předmětech, CZ.1.07/1.3.09/ je.
Digitální výukový materiál zpracovaný v rámci projektu „EU peníze školám“ Projekt:CZ.1.07/1.5.00/ „SŠHL Frýdlant.moderní školy“ Škola:Střední škola.
Chytrá volba pro podnikání René Keyzlar Operator Channel Lead 1/3/2012.
Podpora rozvoje cizích jazyků pro Evropu 21. stol. INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ Tento projekt je spolufinancován Evropským sociálním fondem a státním.
EU peníze středním školám Název vzdělávacího materiálu: Verbs about clothes I Číslo vzdělávacího materiálu: AJ2-4 Šablona: II/2 Inovace a zkvalitnění výuky.
INTEGRATED RESCUE SYSTEM Střední průmyslová škola Hranice Mgr. Radka Vorlová 02_Integrated Rescue System CZ.1.07/1.5.00/
B AT SOUBORY Jednoduché skripty ve Windows. O PAKOVÁNÍ PŘÍKAZU OPAKUJ. off for /L %i in ( ) do ( echo *** echo %i echo *** ) Zápis: Opakuj.
EU peníze středním školám Název vzdělávacího materiálu: B2 – Verbs – Computers Číslo vzdělávacího materiálu: ICT12-19 Šablona: III/2 Inovace a zkvalitnění.
Gymnázium, Brno, Elgartova 3 GE - Vyšší kvalita výuky CZ.1.07/1.5.00/ III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Téma: English Grammar.
Gymnázium, Brno, Elgartova 3 GE - Vyšší kvalita výuky CZ.1.07/1.5.00/ III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Téma: English Grammar.
Gymnázium, Brno, Elgartova 3 GE - Vyšší kvalita výuky CZ.1.07/1.5.00/ III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Téma: English Grammar.
Databázové systémy přednáška 6 – Indexy
Úřad průmyslového vlastnictví
Roman Danel Institut ekonomiky a systémů řízení 2016
Dotazovací jazyk SQL - III
Jiří Šafr jiri.safr(AT)seznam.cz Poslední aktualizace 25/6/2014
Telephoning and Texting
Databázové systémy přednáška 2 – Datové typy
I haven´t seen your ID card.
Databázové systémy a SQL
PAST CONTINUOUS MINULÝ ČAS PRŮBĚHOVÝ
Introduction to MS Dynamics NAV (Expected Costs)
DIGITÁLNÍ UČEBNÍ MATERIÁL
Databázové systémy a SQL
Účetní schémata MS Dynamics NAV RTC-základy
Transkript prezentace:

MySql – úvod MySql je multiplatformní databázový systém (server a klient). Je napsán v C a C++. Ke stažení je na pro různé platformy, ve zdrojových i binárních verzích. My se zde budeme zabívat konkrétně knihovnou libmysqlclient, která umožňuje komunikaci libovolného programu s mysql databází. Ještě než se pustíme do samotného popisu bych zmíníl, že u MySql se dají volit některé možnosti už při kompilaci, které lze změnit pouze další rekompilací. Zmíním zde některé volby configure skriptu, jde o optimalizaci, velikost a kódování:./configure --enable-assembler (povolí assembler, zvětší rychlost)./configure --with-client-ldflags=-all-static (zkompiluje mysqlclientlib ze statických knihoven, zvětší rychlost a velikost)./configure --with-mysqld-ldflags=-all-static (zkompiluje mysqld ze statických knihoven, zvětší rychlost a velikost)./configure --default-character-set=CHARSET (zkompiluje jako defaulní znakovou sadu CHARSET, existuje zde volba czech )./configure --default-collation=COLLATION (porovnávání řetězců, MySql používá jako default latin1_swedish_ci, existuje latin2_czech_ci )

MySql – úvod a kompilace programu Binární verze pro linux stažené z používají tyto flagy: CFLAGS ="-O3 -mpentiumpro" CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti" Kompilace programu s podporou mysql: Při Kompilaci programu s podporou mysql potřebujeme zahrnout hlavičkový soubor mysql.h : #include a nalinkovat program s knihovnou (lib)mysqlclient (zjednodušeně - linux): gcc `mysql_config—cflags` `mysql_config –libs` test.c -o test

MySql C API – Data typy Data typy používané v MySql: typedef char my_bool; Boolean (Pozor char!). typedef unsigned long long my_ulonglong; The type used for the number of rows and for mysql_affected_rows(), mysql_num_rows(), and mysql_insert_id(). This type provides a range of 0 to 1.84e19. On some systems, attempting to print a value of type my_ulonglong will not work. To print such a value, convert it to unsigned long and use a %lu print format. typedef char **MYSQL_ROW – This is a type-safe representation of one row of data. It is currently implemented as an array of counted byte strings. (You cannot treat these as null- terminated strings if field values may contain binary data, because such values may contain null bytes internally.) Rows are obtained by calling mysql_fetch_row(). typedef unsigned int MYSQL_FIELD_OFFSET - This is a type-safe representation of an offset into a MySQL field list. (Used by mysql_field_seek().) Offsets are field numbers within a row, beginning at zero.

MySql C API – Data typy (MYSQL) Data typy používané v MySql: typedef struct st_mysql {... } MYSQL; This structure represents a handle to one database connection. It is used for almost all MySQL functions. Není třeba znát důkladně proměnné této struktury, pro nás reprezentuje handle k databázy. (Proměnné jsem neuvedl, protože by se sem nevlezly)

MySql C API – Data typy (MYSQL_FIELD) Data typy používané v MySql: typedef struct st_mysql_field { char *name; /* Jméno pole, nulou ukončený řetězec */ char *org_name; /* Originální jméno pole (jestli jm.je alias) */ char *table; /* Jméno tabulky obsahující toto pole nebo NULL */ char *org_table; /* Originální jméno tabulky (jestli je tab alias) */ char *db; /* Database for table */ char *catalog; /* Catalog for table */ char *def; /* Default value (set by mysql_list_fields) */ unsigned long length; /* Width of column (create length) */ unsigned long max_length; /* Max width for selected set */ unsigned int name_length; unsigned int org_name_length; unsigned int table_length; unsigned int org_table_length; unsigned int db_length; unsigned int catalog_length; unsigned int def_length; unsigned int flags; /* Div flags */ unsigned int decimals; /* Počet čísel v poli */ unsigned int charsetnr; /* Character set */ enum enum_field_types type; /* Typ pole, typy popsány na následující stránce */ } MYSQL_FIELD ; This structure contains information about a field, such as the field's name, type, and size. Its members are described in more detail here. You may obtain the MYSQL_FIELD structures for each field by calling mysql_fetch_field() repeatedly. Field values are not part of this structure; they are contained in a MYSQL_ROW structure.

MySql C API – Data typy (enum_field_types) Uvnitř struktury MYSQL_FIELD: enum enum_field_types; Enumerace použitá ve struktuře MYSQL_FIELD, určuje typ pole: HodnotaPopis FIELD_TYPE_TINY TINYINT field FIELD_TYPE_SHORT SMALLINT field FIELD_TYPE_LONG INTEGER field FIELD_TYPE_INT24 MEDIUMINT field FIELD_TYPE_LONGLONG BIGINT field FIELD_TYPE_DECIMAL DECIMAL or NUMERIC field FIELD_TYPE_FLOAT FLOAT field FIELD_TYPE_DOUBLE DOUBLE or REAL field FIELD_TYPE_TIMESTAMP TIMESTAMP field FIELD_TYPE_DATE DATE field FIELD_TYPE_TIME TIME field FIELD_TYPE_DATETIME DATETIME field FIELD_TYPE_YEAR YEAR field FIELD_TYPE_STRING CHAR field FIELD_TYPE_VAR_STRING VARCHAR field FIELD_TYPE_BLOB BLOB or TEXT field (use max_length to determine the maximum length) FIELD_TYPE_SET SET field FIELD_TYPE_ENUM ENUM field FIELD_TYPE_NULL NULL-type field FIELD_TYPE_CHAR Deprecated; use FIELD_TYPE_TINY instead

MySql C API – Data typy (enum_field_types) Uvnitř struktury MYSQL_FIELD: Ve struktuře MYSQL_FIELD jsou ještě flagy, které je nutno popsat: unsigned int flags; Popis jednotlivých bitů (bity se můžou navzájem kombinovat) HodnotaPopis NOT_NULL_FLAG Pole nemůže být NULL PRI_KEY_FLAG Pole je část primárního klíče UNIQUE_KEY_FLAG Pole je část jedinečného (unique) klíče MULTIPLE_KEY_FLAG Pole je část non-unique klíče UNSIGNED_FLAG Pole má UNSIGNED atributu ZEROFILL_FLAG Pole má ZEROFILL atributu BINARY_FLAG Pole má BINARY atributu AUTO_INCREMENT_FLAG Pole má AUTO_INCREMENT atributu ENUM_FLAG Pole je ENUM (deprecated) SET_FLAG Pole je SET (deprecated) BLOB_FLAG Pole je BLOB or TEXT (deprecated) TIMESTAMP_FLAG Pole je TIMESTAMP (deprecated)

MySql C API – Data typy (MYSQL_RES) Data typy používané v MySql: typedef struct st_mysql_res { my_ulonglong row_count; MYSQL_FIELD *fields; MYSQL_DATA *data; MYSQL_ROWS *data_cursor; unsigned long *lengths; /* column lengths of current row */ MYSQL *handle; /* for unbuffered reads */ MEM_ROOT field_alloc; unsigned int field_count, current_field; MYSQL_ROW row; /* If unbuffered read */ MYSQL_ROW current_row; /* buffer to current row */ my_bool eof; /* Used by mysql_fetch_row */ /* mysql_stmt_close() had to cancel this result */ my_bool unbuffered_fetch_cancelled; const struct st_mysql_methods *methods; } MYSQL_RES ; This structure represents the result of a query that returns rows (SELECT, SHOW, DESCRIBE, EXPLAIN). The information returned from a query is called the result set in the remainder of this section.

MySql C API – Inicializace (otevření spojení) Inicializace: Abychom úspěšně otevřeli databázy, musíme se nejdřív spojit ze serverem. Funkce mysql_init() otevře spojení a při úspěchu vrátí ukazatel na strukturu MYSQL. Druhý krok je otevřít databázy pod uživatelským jménem, zadat heslo, apod..., to provedeme funkcí mysql_real_connect(). MYSQL* mysql_init(MYSQL *mysql); Tuto funkci voláme na začítku s parametrem NULL. MYSQL* mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long clientflag); Poslední 3 parametry můžou být 0, NULL, 0 Příklad: MYSQL *mysql; mysql = mysql_init(NULL); mysql = mysql_real_connect(mysql, Host, User, Pass, Db, NULL, 0, NULL);

MySql C API – Deinicializace (zavření spojení) Deinicializace: Jestli jsme úspěšně otevřeli spojení, udělali jsme co jsme potřebovali a teď chceme spojení ukončit, zavoláme mysql_close(). MYSQL* mysql_close(MYSQL *sock); Touto funkcí ukončíme spojení. Příklad: MYSQL *mysql; mysql = mysql_init(NULL); mysql = mysql_real_connect(mysql, Host, User, Pass, Db, NULL, 0, NULL); mysql_close(mysql);

MySql C API – Požadavky (queries) a výsledky (results) Když je spojení aktivní, klient může poslat požadavek funkcí mysql_query() a mysql_real_query(). Rozdíl těchto funkcí je v tom, že funkcí mysql_query() posíláme nulou ukončený řetězec a funkcí mysql_real_query() můžeme poslat i binární data (posíláme i délku). int mysql_query(MYSQL *mysql, const char *query); int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length); Je nutné znát výsledek našeho požadavku. MYSQL_RES *mysql_store_result(MYSQL *mysql); Každý výsledek vrácený funkcí mysql_store_result() musíme vyčistit funkcí: void mysql_free_result(MYSQL_RES *result); MYSQL_ROW mysql_fetch_row(MYSQL_RES *result); Retrieves the next row of a result set. When used after mysql_store_result(), mysql_fetch_row() returns NULL when there are no more rows to retrieve. When used after mysql_use_result(), mysql_fetch_row() returns NULL when there are no more rows to retrieve or if an error occurred.

MySql C API – Požadavky (queries) a výsledky (results) Jednoduchý příklad funkce, která provede požadavek a vrátí MYSQL_ROW: static const char MySqlHost[] = "localhost"; static const char MySqlUser[] = "UserName"; static const char MySqlPass[] = "Password"; static const char MySqlDb[] = "Example"; my_bool GetMysql(char *query) { MYSQL *mysql = mysql_init(NULL); MYSQL_RES *res; MYSQL_ROW row; if (mysql != mysql_real_connect(mysql, MySqlHost, MySqlUser, MySqlPass, MySqlDb, NULL, 0, NULL) ) { mysql_close(mysql); return FALSE; /* chyba při spojení */ } if (mysql_query(mysql, query)) { mysql_close(mysql); return FALSE; /* chyba MySql serveru */ } res = mysql_store_result(mysql); if (res) { row = mysql_fetch_row(res); /* tady něco co prošťourá row */ mysql_free_result(res); } mysql_close(mysql); return TRUE; /* vše ok */ }

MySql C API – Požadavky (queries) a výsledky (results) Jednoduchý příklad přímo z manuálu: pozor, tady je proměnná mysql deklarována takto: MYSQL mysql; MYSQL_RES *result; unsigned int num_fields; unsigned int num_rows; if (mysql_query(&mysql, query_string)) { /* error */ } else { /* query succeeded, process any data returned by it */ result = mysql_store_result(&mysql); if (result) { /* there are rows */ num_fields = mysql_num_fields(result); /* retrieve rows, then call mysql_free_result(result) */ } else { /* mysql_store_result() returned nothing; should it have? */ if (mysql_field_count(&mysql) == 0) { /* query does not return data */ /* (it was not a SELECT) */ num_rows = mysql_affected_rows(&mysql); } else { /* mysql_store_result() should have returned data */ fprintf(stderr, "Error: %s\n", mysql_error(&mysql)); } } }

MySql C API – Závěr Manuálové stránky MySQL mají přes 4mb a není v mé moci udělat jejich absolutní překlad. Celý smysl spočívá v tom, že klient MySQL otevře databázy (pomocí knihovny libmysqlclient), pošle požadavek, vrátí se mu výsledek, zhodnotí ho a uzavře spojení. Ještě před tím, než databázy otevřeme ji musíme nejdřív vytvořit, to můžeme udělat pomocí programu mysql: takto jsem to udělal já: /usr/local/bin/mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13 to server version: create database Example; use Example; create TABLE Test(... ); quit Tady jsou odkazy, ze kterých jsem čerpal: