MySql úvod. ./configure --with-client-ldflags=-all-static (zkompiluje mysqlclientlib ze statických knihoven, zvětší rychlost a velikost)

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

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

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

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

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

Čipové karty Lekařská informatika

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

MySQL sežere vaše data

Compression of a Dictionary

GUIDELINES FOR CONNECTION TO FTP SERVER TO TRANSFER PRINTING DATA

Introduction to MS Dynamics NAV

User manual SŘHV Online WEB interface for CUSTOMERS June 2017 version 14 VÍTKOVICE STEEL, a.s. vitkovicesteel.com

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

MySQL manuál. Copyright: Adam Jun Stránky manuálu:

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

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Změny v Tabulce ALTER TABLE nazev_tabulky prikaz1, prikaz2, prikaz3,..., prikazn; -provede změny ve stávající tabulce s názvem "nazev_tabulky"

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

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

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

Embedded SQL v C/C++ úvod. Administrace Oracle Kateřina Opočenská

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

Úvod do programovacích jazyků (Java)

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

Rozšiřování a upravování stávající funkcionality PLToolbox, Orafce

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

PG 9.5 novinky ve vývoji aplikací

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

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

IUJCE 07/08 Přednáška č. 1

Database systems. Normal forms

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

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

Měřící systém se vzdáleným přístupem. Databáze

x86 assembler and inline assembler in GCC

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Informační systémy 2008/2009. Radim Farana. Obsah. Skripty a dávky. Nastavení aktuální databáze. USE DatabaseName

Programování v Javě I. Únor 2009

PB161 Programování v jazyce C++ Přednáška 10

Základy programování (IZP)

Tabulka 1 Stav členské základny SK Praga Vysočany k roku 2015 Tabulka 2 Výše členských příspěvků v SK Praga Vysočany Tabulka 3 Přehled finanční

Programování v Javě I. Leden 2008

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

Instrukce pro vzdálené připojení do učebny 39d

PREPROCESOR POKRAČOVÁNÍ

Postup objednávky Microsoft Action Pack Subscription

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

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

POPIS TUN TAP. Vysvetlivky: Modre - překlad Cervene - nejasnosti Zelene -poznamky. (Chci si ujasnit o kterem bloku z toho schematu se mluvi.

PB161 Programování v jazyce C++ Přednáška 10

MySQLi (objektově) Příklad vytvoření instance třídy včetně parametrů pro připojení: $mysqli = new mysqli('localhost', 'login', 'heslo', 'databaze');

Jazyk VHDL zápis čísel, znaků a řetězců. Jazyk VHDL základní datové typy a operátory. Kurz A0B38FPGA Aplikace hradlových polí

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

WL-5480USB. Quick Setup Guide

Základy programování (IZP)

Základy programování (IZP)

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

SPECIFICATION FOR ALDER LED

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Java Cvičení 05. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

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

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Stručný úvod do programování v jazyce C 2.díl. České vysoké učení technické Fakulta elektrotechnická

Rezervační systém Tvorba WWW stránek

Semestrální práce z DAS2 a WWW

2. Entity, Architecture, Process

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Instalace a konfigurace OpenAdmin tool na M$ a Linuxu

Tento materiál byl vytvořen v rámci projektu Operačního programu Vzdělávání pro konkurenceschopnost.

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

Kurz Databáze. Přechod na SQL server. Obsah. Vytvoření databáze. Lektor: Doc. Ing. Radim Farana, CSc.

Obsah&/&Content& Všeobecné)podmínky)(v)češtině)) Terms)and)Conditions)(in)english)) )

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

Základy programování (IZP)

Prvni. Obsah. Strana číslo: {00}

České vysoké učení technické v Praze Fakulta elektrotechnická. Remote Flash Usability testing

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

2N Voice Alarm Station

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

Skripty základy VB, vestavěné objekty, příklady


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

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

WORKSHEET 1: LINEAR EQUATION 1

Výukový materiál zpracovaný v rámci operačního programu Vzdělávání pro konkurenceschopnost

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Embedded SQL Dotazovací Jazyky I. Bc. CHOMUT Miroslav Bc. VODOLÁN Miroslav

Individuální projekt z předmětu webových stránek Anketa Jan Livora

Jazyk PL/SQL Úvod, blok

MQL4 COURSE. V tomto dodatku je obsažen popis 25 obchodních funkcí jazyka MQL4. Rozhodl jsem se napsat

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

Fingerprint Verification Control

Empty, Null, Nothing, Missing, prázdný řetězec a buňka

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Úvod do programovacích jazyků (Java)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Univerzita Pardubice. Centrální správa dokumentů

Arduino Ethernet Shield W5100 R3

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

Granit 1280i. Stručný návod k použití. Industrial Full Range Laser Scanner CZ-QS Rev A 1/14

Transkript:

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 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 www.mysql.com 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 <mysql/mysql.h> 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 nullterminated 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: Hodnota Popis 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) Hodnota Popis 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: 4.0.22 create database Example; use Example; create TABLE Test(... ); quit Tady jsou odkazy, ze kterých jsem čerpal: www.mysql.com www.metalshell.com www.ousob.com www.root.cz