1 / 14

MySql – úvod

MySql – úvod.

Télécharger la présentation

MySql – úvod

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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)

  2. 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

  3. MySql C API – Data typy • Data typy používané v MySql: • typedef charmy_bool;Boolean (Pozor char!). • typedefunsigned long longmy_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. • typedefchar**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(). • typedefunsigned intMYSQL_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.

  4. MySql C API – Data typy (MYSQL) • Data typy používané v MySql: • typedefstruct 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)

  5. 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 longlength; /* Width of column (create length) */unsigned longmax_length; /* Max width for selected set */unsigned intname_length;unsigned intorg_name_length;unsigned inttable_length;unsigned intorg_table_length;unsigned intdb_length;unsigned intcatalog_length;unsigned intdef_length;unsigned intflags; /* Div flags */unsigned intdecimals; /* Počet čísel v poli */unsigned intcharsetnr; /* Character set */ enum enum_field_typestype; /* 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.

  6. MySql C API – Data typy (enum_field_types) • Uvnitř struktury MYSQL_FIELD: • enumenum_field_types;Enumerace použitá ve struktuře MYSQL_FIELD, určuje typ pole:HodnotaPopisFIELD_TYPE_TINY TINYINT fieldFIELD_TYPE_SHORT SMALLINT fieldFIELD_TYPE_LONG INTEGER fieldFIELD_TYPE_INT24 MEDIUMINT fieldFIELD_TYPE_LONGLONG BIGINT fieldFIELD_TYPE_DECIMAL DECIMAL or NUMERIC fieldFIELD_TYPE_FLOAT FLOAT fieldFIELD_TYPE_DOUBLE DOUBLE or REAL fieldFIELD_TYPE_TIMESTAMP TIMESTAMP fieldFIELD_TYPE_DATE DATE fieldFIELD_TYPE_TIME TIME fieldFIELD_TYPE_DATETIME DATETIME fieldFIELD_TYPE_YEAR YEAR fieldFIELD_TYPE_STRING CHAR fieldFIELD_TYPE_VAR_STRING VARCHAR fieldFIELD_TYPE_BLOB BLOB or TEXT field (use max_length to determine the maximum length)FIELD_TYPE_SET SET fieldFIELD_TYPE_ENUM ENUM fieldFIELD_TYPE_NULL NULL-type fieldFIELD_TYPE_CHARDeprecated; use FIELD_TYPE_TINY instead

  7. 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 intflags; • Popis jednotlivých bitů (bity se můžou navzájem kombinovat)HodnotaPopisNOT_NULL_FLAG Pole nemůže být NULLPRI_KEY_FLAG Pole je část primárního klíčeUNIQUE_KEY_FLAG Pole je část jedinečného (unique) klíčeMULTIPLE_KEY_FLAG Pole je část non-unique klíčeUNSIGNED_FLAG Pole má UNSIGNED atributuZEROFILL_FLAG Pole má ZEROFILL atributuBINARY_FLAG Pole má BINARY atributuAUTO_INCREMENT_FLAG Pole má AUTO_INCREMENT atributuENUM_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)

  8. MySql C API – Data typy (MYSQL_RES) • Data typy používané v MySql: • typedef struct st_mysql_res{my_ulonglongrow_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_ROOTfield_alloc;unsigned intfield_count, current_field;MYSQL_ROWrow; /* If unbuffered read */MYSQL_ROWcurrent_row; /* buffer to current row */my_booleof; /* Used by mysql_fetch_row *//* mysql_stmt_close() had to cancel this result */my_boolunbuffered_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.

  9. 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 intport,const char *unix_socket,unsigned longclientflag);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);

  10. 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);

  11. 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). • intmysql_query(MYSQL *mysql, const char *query); • intmysql_real_query(MYSQL *mysql, const char *query,unsigned longlength); • 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í:voidmysql_free_result(MYSQL_RES *result); • MYSQL_ROWmysql_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.

  12. 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 charMySqlHost[] = "localhost";static const charMySqlUser[] = "UserName";static const charMySqlPass[] = "Password";static const charMySqlDb[] = "Example";my_boolGetMysql(char *query){MYSQL *mysql = mysql_init(NULL);MYSQL_RES *res;MYSQL_ROWrow; 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 */}

  13. 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: MYSQLmysql;MYSQL_RES *result;unsigned intnum_fields;unsigned intnum_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));}}}

  14. 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/mysqlWelcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13 to server version: 4.0.22create 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

More Related