MySQL er en åpen kildekode-pakke. MySQL-funksjoner og -applikasjoner

Andrey Klochkov

Hva er MySQL

Før du bestemmer deg for om du vil bruke MySQL-pakken som en databaseserver, må du først finne ut hva den er. MySQL er et relasjonsdatabasestyringssystem.

MySQL støtter SQL (Structured Query Language) og kan brukes som en SQL-server. Dette betyr at du kan kommunisere med serveren i SQL: klienten sender en forespørsel til serveren, serveren behandler den og gir klienten kun dataene som ble mottatt som et resultat av denne forespørselen. Dermed trenger ikke klienten å laste ned data og utføre beregninger, som for eksempel i Microsoft Access.

I tillegg er MySQL åpen kildekode-programvare, dvs. det kan fritt studeres og endres. Pakken distribueres under vilkårene i GPL (General Public License) og kan lastes ned gratis fra Internett (http://www.mysql.com) for ikke-kommersiell bruk.

Med fremveksten av Internett-teknologier som gjør det mulig å lage dynamiske websider, har etterspørselen etter DBMS-er som vil være best egnet for dette med tanke på hastighet, pålitelighet og stabilitet økt enormt. Og her viste MySQL-pakken seg å være god, som viste seg å være rask, enkel og pålitelig, men på bekostning av funksjonssvikt (vi vil umiddelbart ta forbehold om at MySQL-utviklerne lover å legge til de manglende funksjonene i de neste versjonene av programmet).

I det store og hele skaper ikke mangelen på noen funksjoner som er ofret for hastighet og pålitelighet mye trøbbel for brukerne (selv om det noen ganger er noe ubehag). For å jobbe med en fullverdig bedriftsdatabase, kommer MySQL til kort, men MySQL takler daglige oppgaver ganske bra.

ulemper

Her er en kort liste over hovedfunksjonene som MySQL mangler.

Transaksjoner- lar deg kombinere flere SQL-spørringer til én arbeidsenhet, og i tilfelle feil på noen av spørringene som er inkludert i denne enheten, utfør en tilbakestilling for å returnere dataene til dens opprinnelige tilstand. La oss forklare med et eksempel.

Det er nødvendig å ta ut penger fra en konto og sette dem på en annen. For å gjøre dette, må du utføre to SQL-spørringer: den første er å ta ut penger fra en konto, og den andre er å kreditere dem til en annen konto. Hvis du ikke bruker transaksjoner, vil pengene bli trukket fra kontoen hvis den andre forespørselen mislykkes, men vil ikke bli kreditert til en annen konto. Bruken av transaksjoner lar deg rulle tilbake som om pengene ikke hadde blitt trukket fra kontoen i det hele tatt.

Merk at du kan emulere en transaksjon ved å bruke LOCK TABLES-kommandoen i MySQL. Denne kommandoen låser tabellen mens spørringene utføres, og sikrer dermed dataintegritet, men kan fortsatt ikke rulles tilbake.

Utløsere- tjene til å automatisere overvåking av status og drift av databasen. Utløseren lagres i databasen og utløses når en bestemt hendelse inntreffer. La oss ta det samme eksempelet på pengeoverføring: hvis den andre forespørselen mislykkes, vil en utløser utløses og enten rulle tilbake eller sende en melding til databaseadministratoren.

Lagrede prosedyrer- dette er flere SQL-kommandoer som er lagret i databasen under et bestemt navn og sammen utfører en bestemt funksjon. Lagrede prosedyrer kan utvide SQL-syntaksen slik at den ligner et vanlig programmeringsspråk (som Oracle PL / SQL). I vårt eksempel på pengeoverføring kan to SQL-spørringer lagres under samme navn, og deretter kalle denne prosedyren, og gi den to kontonumre og pengebeløpet som parametere. Da vil begge forespørslene bli utført i én transaksjon.

Nestede søk- lar deg erstatte verdier dynamisk i utvalgsbetingelsene, basert på resultatene av en annen spørring. Ifølge forfatteren, hvis du på en eller annen måte kan klare deg uten alt det ovennevnte, ødelegger fraværet av nestede spørsmål noen ganger livet veldig. For å finne ut hvilken bil som har fraktet mer last enn gjennomsnittet for flåten, må du for eksempel gjøre følgende SQL-spørring:

VELG auto FRA autopark HVOR massa>! Mer enn hva? Jeg aner ikke hva gjennomsnittet er!

For å gjøre dette, må gjennomsnittsverdien i massafeltet beregnes:

VELG AVG (massa) FRA autoparkering

Hvis nestede spørringer støttes, kan de to spørringene nestes:

VELG auto FRA autoparkering WHERE massa> (VELG AVG (massa) FRA autoparkering)

Men når det gjelder MySQL, må gjennomsnittsverdien finnes separat og erstattes med en annen spørring direkte i CGI-skriptet, noe som utvilsomt påvirker ytelsen.

UNION erklæring- Enkelt sagt, den kombinerer utdataene fra flere spørringer til ett, med muligheten til å eliminere dupliserte rader.

Overlappende dataoppdatering- lar deg slette og oppdatere relaterte data. Hvis du for eksempel sletter en kundepost fra databasen, slettes alle ordreposter for den kunden automatisk fra de relaterte tabellene.

Fordeler

La oss nå liste opp fordelene med MySQL.

Høyhastighetsytelse. Takket være den interne multithreading-mekanismen er MySQL-ytelsen veldig høy.

Sikkerhet. Et ganske høyt sikkerhetsnivå er gitt av mysql-databasen, som opprettes når pakken er installert og inneholder fem tabeller. Ved hjelp av disse tabellene kan du beskrive hvilken bruker fra hvilket domene som kan jobbe med hvilken tabell og hvilke kommandoer han kan bruke. Passord som er lagret i databasen kan krypteres ved hjelp av funksjonen MySQL innebygd passord ().

Tillatelse. Tidligere var MySQL-lisensiering litt forvirrende; dette programmet distribueres nå gratis for ikke-kommersielle formål.

Åpenhet i koden. Takket være dette kan du selv legge til de ønskede funksjonene til pakken, og utvide funksjonaliteten etter hvert som du trenger den. MySQL-forfatterne kan forresten selv gjøre dette for deg mot en avgift. For å bestille en MySQL-utvidelse fra pakkeskaperne, besøk http://www.mysql.com og fyll ut riktig skjema.

Pålitelighet. Skaperne av MySQL har gjort en god jobb: så vidt jeg vet er denne pakken ganske stabil og vanskelig å bryte. Jeg sporer ikke spesifikt sammendraget av resultatene av hackerangrep på MySQL, men jeg kom aldri over (i motsetning til de samme webserverne) en melding om at MySQL ble skadet som et resultat av noens ondsinnede hensikter.

Ressurser. Dette kan avhenge av ulike faktorer, men du trenger ikke en superdatamaskin uansett.

Samfunnet. Som et resultat av åpenheten til koden, gratisprogrammet, dets stabile og pålitelige arbeid, har det dannet seg et fellesskap av mennesker som ikke bare er lojale mot MySQL, men som også deltar på alle mulige måter både i utviklingen av selve pakken og i å lære mindre erfarne mennesker å jobbe med det. Det finnes et stort antall e-postlister og konferanser hvor du kan få gratis hjelp når som helst på døgnet.

Bærbarhet. For tiden finnes det versjoner av programmet for de fleste vanlige dataplattformer. Dette betyr at du ikke blir tvunget inn i et spesifikt operativsystem. Du kan selv velge hva du skal jobbe med, for eksempel med Linux eller Windows, men selv om du endrer OS, vil du ikke miste dataene dine, og du trenger ikke engang ekstra verktøy for å overføre dem.

Jeg vet ikke om det er en ulempe eller en fordel, det faktum at MySQL ikke har et grafisk brukergrensesnitt (GUI). For eksempel synes jeg det er mer praktisk å skrive en SQL-spørring manuelt (forresten, resultatene av dens kjøring kan omdirigeres til en fil) enn å bruke Query Wizard, som i Microsoft SQL Server.

Det finnes flere GUI-klientprogrammer for MySQL, men de er langt fra perfekte og bremser for det meste bare ting. Hvis du foretrekker en GUI, anbefaler jeg å laste ned og prøve disse programmene for å oppmuntre skaperne deres til å forbedre produktene sine ytterligere. Her er en langt fra fullstendig liste over GUI-programmer:

  • Winmysqladmin - inkludert i Windows-distribusjonen av MySQL, har et standard grafisk grensesnitt og lar deg administrere MySQL;
  • MySqlManager - inkludert i Windows-distribusjonen av MySQL, bærer klientfunksjoner (men forfatteren var ikke i stand til å gjøre noe alvorlig med det);
  • MySQL Administrator for Windows er et mer "avansert" tredjepartsverktøy. Lar deg registrere og koble til flere MySQL-servere samtidig, opprette, slette og endre strukturen til databaser og tabeller, opprette nøkler i tabeller, skrive SQL-spørringer og lagre dem i en fil:
  • XMySQL er en MySQL-klient for X Window-lignende systemer. Gir full tilgang til tabeller, tillater masseinnsetting og sletting, og har en spørringsdesigner oget. Programmet finner du på http://web.wt.net/~dblhack/.

En mer fullstendig liste over alle slags verktøy for MySQL (og den er veldig stor) er på http://www.mysql.com/downloads/. Der finner du mye interessant og nyttig: dataeksport fra MySQL til Microsoft Access og omvendt, ODBC-drivere, etc.

Til tross for mangelen på et grafisk grensesnitt, kommer MySQL med noen ganske kraftigetøy. Nedenfor er en liste over dem med korte beskrivelser av verktøyene.

  • MySQLAdmin er hovedverktøyet for MySQL-administrasjon. Med den kan du opprette, ødelegge, endre databaser og ha full kontroll over serveren din.
  • MySQLDump er et sikkerhetskopieringsverktøy.
  • MySQLAccess - Lar deg endre tilgangsrettighetstabeller og vise innholdet i en lettlest form.
  • MySQLBug - I tilfelle en feil i MySQL, genererer dette verktøyet en feilrapport for programutviklere, og sender den også til MySQL-e-postlisten slik at spesialister kan hjelpe deg med å løse problemet.
  • MySQLImport - Importerer data fra en avgrenset fil til databasen.
  • MySQLShow - viser strukturen til databaser og tabellene de består av.

Jeg vil trekke leserens oppmerksomhet til følgende: nå er det programmer som fungerer gjennom CGI-grensesnittet, som gir nesten en komplett pakke med. Disse programmene ligger på webservere og er bare vanlige CGI-skript. Svært ofte er disse skriptene plassert i offentlig tilgjengelige kataloger. Faren er at ved hjelp av søkemotorer kan hvem som helst finne slike programmer etter filnavn, og deretter gjøre hva hjertet begjærer med databasen din. Dette problemet kan enkelt omgås ved å plassere disse skriptene i passordbeskyttede kataloger på serveren. Men den beste løsningen er å slutte å bruke slike programmer på serveren helt.

MySQL har også sin egen SQL-språkutvidelse. Disse funksjonene kan brukes i en spørring på to måter. Først som en hentet verdi: funksjonen er inkludert i listen over hentede felt. Returverdien fra funksjonen vil bli beregnet for hver post i tabellen og vist som om det var et tabellfelt. La oss for eksempel vise tittelen på artikkelen og lengden:

VELG tittel, LENGDE (tittel) FRA tabellen

Som et resultat får vi to kolonner, hvor den ene er hentet fra tabellen, og den andre ble beregnet.

For det andre kan funksjonen brukes som en del av WHERE-leddet - i dette tilfellet vil den erstatte konstanten på tidspunktet for kjøringen av spørringen. La meg forklare med et eksempel: du må finne hendelser som skjedde for mer enn en dag siden.

SELECT event FROM table WHERE time> (Unix_TIMESTAMP () - (60 * 60 * 24))

Her beregner Unix_TIMESTAMP ()-funksjonen gjeldende tidspunkt som vi trekker en dag fra.

applikasjon

I følge forfatteren er den mest egnede applikasjonssfæren for MySQL Internett, takket være det gode sikkerhetssystemet til denne pakken, stabil drift og høy ytelse. Hvis internettprosjektet ditt går tom for transaksjoner, kan du bruke Postgres. Postgres ligner på mange måter MySQL, praktisk talt ikke dårligere enn den i ytelse, men den har mer funksjonalitet. Men som erfaringen viser, er MySQLs muligheter for enkle Internett-prosjekter ganske nok.

Når det gjelder bruken av MySQL som bedriftsdatabase, er situasjonen ikke særlig gunstig her. Vi vil formulere kravene til SQL-serveren til bedriftsdatabasen, basert på spesifikasjonene til de ansattes arbeid, og evaluere fra synspunktet til disse kravene MySQL.

Evnen til å jobbe med flere brukere. Dette åpenbare kravet bør suppleres med det faktum at intensiteten av databasebruk i dette tilfellet vil være mye høyere enn på webserveren. For et nettsted anses 20 besøkende på samme tid som en stor suksess, og i tilfelle av en bedriftsbase kan selv et lite selskap skryte av en slik indikator. Spesiell oppmerksomhet bør rettes mot det faktum at bedriftsdatabasen bruker mer komplekse brukergrensesnitt enn sidene på nettstedet; med andre ord, den sender forespørsler til serveren mer intensivt. Teknisk sett betyr dette at du trenger en lås på nivå med den mutbare posten. Det er her MySQL ikke gjør det bra: Låsing gjøres på tabellnivå. Dette betyr spesielt at dersom noen legger inn en ordre, så må alle spørringer (analysere statistikk, velge poster for en rapport osv.) vente til ordren er fullført. Når det gjelder en bedriftsdatabase, negerer dette til og med ytelsesfordelen til MySQL.

Dataintegritetskontroll på SQL-servernivå. En bedriftsdatabase har et komplekst dataskjema, og det er svært vanskelig å opprettholde dataintegriteten ved hjelp av et klientprogram: en relasjonell kan slå sammen fem til syv tabeller, og antallet tabeller kan være opptil 30-40. Og i dette tilfellet blir MySQLs manglende evne til å kaskadere oppdateringer og slettinger av poster i relaterte tabeller avgjørende.

I tillegg har vi allerede nevnt at bedriftsdatabasen bruker et mer komplekst grensesnitt, og denne omstendigheten genererer ytterligere to krav: støtte for alle standard SQL-setninger (og nyttige utvidelser), og bruk av lagrede prosedyrer og triggere. Akk, MySQL gjør oss ikke glade her heller.

Ved å oppsummere alt som er sagt, kan vi konkludere med at egenskapene til MySQL DBMS er ganske nok for de fleste Internett-prosjekter. De vil være nok til å lagre adresseboken i bedriftens interne nettverk.

Praktisk bruk av MySQL ++

Del 1. Hvor skal du begynne

Innholdsserie:

Det overveldende flertallet av applikasjoner bruker databaser til en viss grad i prosessen med arbeidet. Ved utvikling av slike applikasjoner er verktøy som forenkler interaksjon med ulike DBMS-er svært nyttige. Et av disse verktøyene er MySQL ++-biblioteket, som lar deg effektivt organisere tilgang til MySQL-databaser fra programmer skrevet i C ++. Jeg vil prøve å analysere i detalj funksjonaliteten til dette biblioteket, dets fordeler og ulemper. Jeg starter med de generelle egenskapene til MySQL ++.

1. Hva er MySQL ++

MySQL ++ er et spesialisert bibliotek med såkalte wrapper-metoder for MySQL C API. Hovedmålet med dette biblioteket er å gjøre arbeidet med SQL-spørringer like enkelt som å jobbe med STL-beholdere.

Den nyeste versjonen av MySQL ++-biblioteket finner du på den offisielle nettsiden. For å unngå ytterligere komplikasjoner er det imidlertid best å konsultere pakkelageret for distribusjonen din.

1.1. Litt historie

I 1998 begynte Kevin Atkinson å utvikle et bibliotek som, i henhold til hans opprinnelige konsept, ville gi utføring av SQL-spørringer og behandling av resultatene deres uten å være knyttet til noen bestemt DBMS. Dette gjenspeiles selv i det opprinnelige navnet - SQL ++. Alle versjoner før 1.0 er frukten av Kevins individuelle arbeid.

I 1999 overtok MySQL AB biblioteket. Først gjorde Michael "Monty" Widenius noe av arbeidet, deretter delegerte han autoriteten til en annen MySQL AB-ansatt, Sinisha Milivojevic. Versjoner 1.0 og 1.1 ble utgitt, hvoretter Atkinson offisielt overførte alle funksjonene for å vedlikeholde biblioteket i hendene på Milivoevich og fjernet seg fullstendig fra enhver deltakelse i dette prosjektet. Milivoevich brakte biblioteket til versjon 1.7.9, som ble utgitt i midten av 2001. På dette tidspunktet ble det åpenbart at det var umulig å implementere et universelt bibliotek med SQL-spørringer uavhengig av spesifikke DBMS-implementeringer. MySQL-orienteringen har blitt uunngåelig.

Etter utgivelsen av versjon 1.7.9 var det en periode med en viss stagnasjon i arbeidet med MySQL, som varte i tre år, frem til august 2004, da Warren Young tok kontroll over situasjonen. Warren ga umiddelbart ut versjon 1.7.10, fikset alle kompileringsproblemer ved bruk av GCC, fikset mange feil, la til nye funksjoner. Generelt, som de sier, "prosessen har startet" ...

I denne artikkelen vurderer jeg versjon 3.0.9 av MySQL ++-biblioteket. På den offisielle nettsiden kunngjøres denne utgivelsen som den "nyeste stabile" utgivelsen.

2. Kort beskrivelse av hovedobjektene (tilkobling, spørring, resultater)

MySQL ++ gir støtte for de fleste av de forskjellige måtene og teknikkene for å jobbe med databaser. Og likevel, til tross for dette mangfoldet, er det et generalisert opplegg for bruk av API for tilgang til databaser:

  • opprette (åpne) en tilkobling til databasen,
  • opprettelse og gjennomføring av en forespørsel,
  • ved vellykket utførelse av forespørselen - behandling av resultatsettet - iterativ sekvensiell passering gjennom postene til dette settet,
  • hvis utførelsen av forespørselen ikke lykkes, er det nødvendig å sikre at feil (unntak) blir håndtert.

Hvert av trinnene ovenfor tilsvarer et klasse- eller klassehierarki i MySQL ++-biblioteket. La oss vurdere dem litt mer detaljert.

2.1. Tilkoblingsobjekt

Connection-objektet administrerer tilkoblingen til MySQL-serveren. For å utføre operasjoner i databasen trenger du minst ett slikt objekt. I en applikasjon avhenger bruken av alle andre MySQL ++-objekter (men ikke alltid direkte) av Connection-forekomsten, så så lenge programmet ditt bruker MySQL ++-biblioteksobjektene, må Connection-objektet også eksistere.

MySQL tillater flere forskjellige typer tilkoblinger mellom klient og server: TCP / IP-sockets, Unix-domene-sockets, navngitte rør. Base Connection-klassen støtter alle disse typene tilkoblinger. Du bestemmer hvilken type tilkobling som kreves i hvert enkelt tilfelle ved å bruke parameterne som sendes til Connection :: connect ()-metoden. Men hvis du på forhånd bestemmer deg for at applikasjonen din skal fungere med bare én type tilkobling, blir spesialiserte underklasser med forenklede grensesnitt tilbudt din oppmerksomhet. For eksempel, hvis programmet ditt har til hensikt å bare få tilgang til nettverksdatabaseserveren, kan du bruke underklassen TCPConnection.

2.2. Spørringsobjekt (spørring)

Som oftest opprettes SQL-spørringer ved å bruke et Query-objekt initialisert av et Connection-objekt.

Spørringen fungerer omtrent som en utdatastrøm i standard C++, så du kan skrive data til den akkurat som std :: cout eller std :: ostringstream. Dette er den nærmeste C ++-stilen brukt av MySQL ++ til layout spørrestrenger. Biblioteket inkluderer strømmanipulatorer med datatypekontroll, noe som i stor grad forenkler opprettelsen av syntaktisk korrekte SQL-kommandoer.

En annen funksjonell funksjon ved Query er Template Queries, som til en viss grad ligner printf-funksjonen til C-språket: en spørringsstreng dannes med tagger inkludert i den, som indikerer hvor variable dataelementer er satt inn. Dette er nyttig i tilfeller der programmet bruker flere spørringer med samme struktur - når du har definert én mal, kan du gjenbruke den flere ganger i forskjellige deler av applikasjonen.

Den tredje metoden for å lage spørringer er å bruke Query-objektet i forbindelse med Specialized SQL Structures (SSQLS), som lar deg lage C++-strukturer som nøyaktig representerer spesifikke databaseskjemaer. Dette gir Query-objektet informasjonen det trenger for å danne generiske SQL-spørringer.

2.3. Resultatsett

Feltdataene i spørringsresultatsettet er lagret i en spesiell klasse kalt String (analogt med standard std :: string). Denne klassen gir operatører for automatisert konvertering av resultatsettobjekter til en hvilken som helst C / C ++ basetype. I tillegg definerer MySQL ++ klasser som DateTime som du kan initialisere med SQL DATETIME-data. For disse automatiske konverteringene kontrolleres deres korrekthet, og i tilfelle konverteringsfeil settes et passende advarselsflagg eller et unntak genereres (avhengig av bibliotekinnstillingene).

For å gi resultatene av å utføre SQL-kommandoer i MySQL ++-biblioteket, implementeres følgende tilnærminger.

2.3.1. Kommandoer som ikke returnerer data

Ikke alle SQL-kommandoer returnerer data. Et eksempel på en slik CREATE TABLE-kommando. For slike kommandoer er det en spesiell type resultat (SimpleResult) som bare returnerer tilstanden etter at kommandoen er utført: vellykket fullføring av kommandoen, antall linjer som er påvirket av kommandoen (hvis noen effekt var underforstått), etc.

2.3.2. Spørringer som returnerer data: MySQL ++ datastrukturer

Den enkleste måten å få et resultatsett på er å bruke Query :: store ()-metoden. Denne metoden returnerer et StoreQueryResult-objekt som stammer fra std :: vektor som er en tilfeldig tilgangsbeholder som består av rader. I sin tur er hvert radobjekt en analog av en vektor (std :: vektor) av strenger (av typen String), ett objekt for hvert felt i resultatsettet. Dermed kan du tenke på StoreQueryResult som en todimensjonal matrise, dvs. for å få det femte feltet fra den andre linjen, kan du ganske enkelt skrive resultat. Du kan også referere til feltene ved navn, så følgende postskjema er også mulig: resultat ["pris"].

En litt mindre praktisk måte å jobbe med et resultatsett på er å bruke metoden Query :: use (), som returnerer et UseQueryResult-objekt. Denne klassen fungerer som en standard STL-iterator. I dette tilfellet vil tilfeldig tilgang til dataene ikke lenger fungere - du går sekvensielt gjennom radene i resultatsettet med en begrensning i retningen: bare fra begynnelsen til slutten. Det er ingen måte å gå tilbake til radene som allerede er krysset, og du vet ikke hvor mange rader som er i et gitt sett før du kommer til den siste raden. Som kompensasjon for disse ulempene får du mer rasjonell bruk av RAM, siden det ikke er behov for å laste hele settet inn i minnet. Dette er spesielt viktig hvis du må jobbe med ekstremt store resultatsett.

2.3.3. Forespørsler som returnerer data: SSQLS Specialized Structures

Å få tilgang til søkeresultater gjennom MySQL ++-datastrukturene er et ganske lavt abstraksjonsnivå - bedre enn å bruke MySQL C API, men ikke mye. Det er mulig å bringe logikken til løsningen nærmere emneområdet for problemet ved å bruke spesialiserte strukturer SSQLS (Specialized SQL Structures). Disse SSQLS-objektene lar deg definere C++-språkstrukturer som tilsvarer tabellstrukturer i et spesifikt databaseskjema. I tillegg er det mye enklere å dokke SSQLS-objekter med standard STL-beholdere (og derfor med algoritmer).

Fordelen med denne metoden er at programmet må inkludere et minimum av SQL-kode. Du kan utføre en spørring og få resultatet i form av C ++ datastrukturer, tilgang som ikke er forskjellig fra tilgang til andre strukturer. Tilgang til de mottatte dataene kan organiseres gjennom Row-objektet, eller du kan bruke bibliotekmetoder for å "dumpe" resultatene inn i en STL-beholder - med sekvensiell, vilkårlig eller assosiativ tilgang - valget er ditt.

Tenk på følgende kodebit:

vektor resultat; spørsmål<< "SELECT * FROM stock"; query.storein(result); for(vector << "Цена: " << i->pris<< endl;

Nesten "ren" C++-kode, uten dikkedarer.

Hvis det av en eller annen grunn er uønsket eller umulig å lage SSQLS-objekter som tilsvarer databasetabellstrukturer, kan du bruke Row-objektet, og kodebiten ovenfor vil nå se slik ut:

vektor resultat; spørsmål<< "SELECT * FROM stock"; query.storein(result); for(vector:: iterator i = resultat.begin (); i! = resultat.slutt (); i ++) cout<< "Цена: " << i->til ("pris")<< endl;

Forskjellene er små. Det første fragmentet ser mer kortfattet ut, men dette påvirker ikke den interne logikken.

2.4. Feil og unntak

Som standard gir biblioteket unntak når det oppstår feil. Du kan valgfritt konfigurere et tilpasset feilflagg som skal settes i stedet for å gi unntak, men husk at unntak gir mer informasjon. Du kan fange ulike typer feil innenfor en enkelt prøvefangst-blokk.

3. Et enkelt eksempel på bruk av MySQL ++

Følgende eksempel viser hvordan du oppretter (åpner) en databasetilkobling, utfører en enkel spørring og viser resultatene - alt dette vi har snakket om så langt.

#inkludere #inkludere #inkludere bruker navneområde std; int main (int argc, char * argv) (// etablerer en tilkobling til testdatabasen mysqlpp :: Connection con (false); if (con.connect ("test_db", "localhost", "tdb_user", "tdb_password" ) ) (// utfør spørringen og vis de oppnådde resultatene mysqlpp :: Query query = con.query ("velg navn fra dvd"); if (mysqlpp :: StoreQueryResult res = query.store ()) (cout<< "Коллекция DVD: " << endl; for(size_t i = 0; i < res.num_rows(); i++) cout << res[i] << endl; } else { cerr << "Ошибка при получении списка DVD: " << query.error() << endl; return -1; } return 0; } else { cerr << "Ошибка при установлении соединения с БД: " << con.error << endl; return -1; } }

For at eksemplet skal fungere, må du lage en MySQL-database kalt test_db som inneholder en tabell kalt dvd. Denne tabellen kan for eksempel ha følgende struktur:

navn VARCHAR (50) sjanger TEKST (70) pris EKTE kjøpt DATO

Etter at testdatabasen test_db er opprettet, må MySQL-administratoren opprette en bruker med tillatelser til å jobbe i den. Brukernavnet og passordet for denne brukeren er allerede spesifisert i eksempelkildekoden ovenfor.

OPPRETT BRUKER [e-postbeskyttet] IDENTIFISERT AV "tdb_password"; GIR ALLE PRIVILEGIER PÅ test_db. * TIL [e-postbeskyttet];

Deretter kan brukeren tdb_user, koblet til test_db-databasen på den lokale verten, lage den tidligere beskrevne dvd-tabellen og eventuelle andre tabeller for testing i den, gjøre endringer i disse tabellene, slette dem og utføre andre operasjoner.

Når det gjelder selve programmet, spør det bare navnefeltet fra dvd-tabellen, og fra det resulterende resultatsettet sendes alle linjene (DVD-titler) sekvensielt ut. Eksemplet er veldig enkelt, men det illustrerer tre av de fire trinnene nevnt i begynnelsen av denne artikkelen. Det fjerde trinnet – unntakshåndtering – vil bli omtalt i en av de neste artiklene i serien.

4. Konklusjon

Selv etter et første, ganske overfladisk blikk på de funksjonelle egenskapene og egenskapene til MySQL ++-biblioteket, blir det klart at det kan gi betydelig hjelp til utviklere av applikasjoner som samhandler med MySQL-servere. Biblioteket kan enkelt tilpasses programmererens behov, inneholder ikke unødvendige dikkedarer og "passer" lett inn i C++-kildekoden.

Denne artikkelen undersøkte de generelle egenskapene til MySQL ++-biblioteket, dets funksjonalitet. Som en illustrasjon ble det gitt et enkelt eksempel på kildekode som bruker MySQL ++-objekter. Den neste artikkelen i serien vil bli viet til å tilpasse og tilpasse MySQL ++-biblioteket i ulike prosjekter. Den tredje artikkelen vil beskrive i detalj utførelsen av SQL-spørringer og behandlingen av resultatene deres. Temaet for den fjerde artikkelen er feilhåndtering og bruk av transaksjoner. I den femte artikkelen skal vi se på de ulike typene data og hvordan man kan jobbe med dem. Spesialiserte forespørselsskjemaer vies spesiell oppmerksomhet i den sjette artikkelen. I den siste, syvende artikkelen i serien, vil vi demonstrere den praktiske bruken av MySQL ++-biblioteket i flertrådede applikasjoner.

Last ned ressurser

static.content.url = http: //www.site/developerworks/js/artrating/

Sone = Linux, åpen kildekode

Artikkel-ID = 497598

ArticleTitle = Praktisk MySQL ++, del 1: Komme i gang

Fra forfatteren: Har du blitt kalt en tekanne? Vel, dette kan fikses! Hver samovar var en gang en tekanne! Eller var alle profesjonelle en gang en samovar? Nei, igjen er det noe galt! Alt i alt er MySQL for nybegynnere.

Hvorfor dummies trenger MySQL

Hvis du seriøst skal koble livet ditt med Internett, vil du ved de aller første trinnene i "nettet" komme over denne DBMS. MySQL kan trygt kalles "all Internet" databasebehandlingssystemet. Ikke en eneste mer eller mindre seriøs ressurs kan klare seg uten den, den finnes i adminpanelet til hver hosting. Og mest av alt er populære CMS og til og med "hjemmelagde" motorer bygget med hennes deltakelse.

Generelt kan du ikke klare deg uten denne plattformen. Men å studere det vil også kreve riktig tilnærming, de riktige verktøyene, og viktigst av alt, lyst og tålmodighet. Jeg håper du har nok av det siste. Og vær forberedt på at hjernen din vil koke, og dampen faller ut av hodet ditt, som fra en ekte tekanne

Men MySQL er så vanskelig for dummies bare hvis du begynner å lære det feil. Vi vil ikke gjøre en slik feil, og vi vil begynne å bli kjent med denne teknologien helt fra begynnelsen.

Enkle konsepter

Først, la oss gå gjennom de grunnleggende konseptene som vi vil nevne i dette innlegget:

Database (DB) er den viktigste konstituerende enheten i DBMS. Databasen inneholder tabeller som består av kolonner og poster (rader). Cellene som dannes i krysset inneholder strukturerte data av en bestemt type.

DBMS (database management system) - et sett med alle programvaremoduler for databaseadministrasjon.

SQL er et strukturert spørrespråk, ved hjelp av hvilket utvikleren "kommuniserer" med kjernen (serveren) i DBMS. Som alle programmeringsspråk har SQL sin egen syntaks, sett med kommandoer og operatører og støttede datatyper.

Jeg tror vi har nok teoretisk kunnskap til å begynne med. Vi vil "male" de manglende hullene i teori med praksis. Nå gjenstår det bare å velge riktig programvareverktøy.

Finne riktig verktøy

Etter å ha "rotet" stort sett i hele utvalget av MySQL-skjell for nybegynnere, innså jeg at disse rett og slett ikke eksisterer. Alle programvareprodukter for DBMS-administrasjon krever en allerede installert databaseserver. Generelt bestemte jeg meg nok en gang for ikke å finne opp "scooteren", og valgte den innenlandske Denwer-pakken. Du kan laste den ned på den offisielle nettsiden.

Den inkluderer allerede alle komponentene i DBMS, slik at en nybegynner kan begynne praktisk bekjentskap med MySQL umiddelbart etter en enkel og forståelig installasjon. I tillegg inkluderer Denwer flere verktøy som er nødvendige for en nybegynner: lokal server, PHP.

De første trinnene

Jeg vil ikke beskrive installasjonsprosessen til "gentlemen's"-settet, siden alt skjer automatisk der. Etter å ha startet instalyakhi, har du bare tid til å trykke på de nødvendige tastene. Akkurat det du trenger i dummies-versjonen av MySQL.

Når installasjonsprosessen er over, start den lokale serveren, vent et par sekunder. Deretter skriver du localhost i adressefeltet til nettleseren din.

På siden "Hurra, det fungerte!" følg en av lenkene på bildet. Deretter vil du bli tatt til phpMyAdmin - et skall for databaseadministrasjon.

Ved å følge lenken http://downloads.mysql.com/docs/world.sql.zip, vil du laste ned prøvedatabasen fra det offisielle MySQL-nettstedet. Gå til phpMyAdmin igjen, i hovedmenyen øverst gå til fanen "Importer". I vinduet Importer til gjeldende, i den første delen (fil som skal importeres), setter du verdien til Bla gjennom datamaskinen.

I utforskervinduet velger du arkivet med den nedlastede eksempeldatabasen. Ikke glem å klikke "OK" nederst i hovedvinduet.

Jeg anbefaler deg å ikke endre de angitte parameterverdiene for nå. Dette kan føre til feil visning av dataene til den importerte kilden. Hvis phpMyAdmin gir en feilmelding om at den ikke kan gjenkjenne databasekomprimeringsalgoritmen, pakk den ut og gjenta hele importprosessen fra begynnelsen.

Hvis alt gikk bra, vil programmeldingen vises øverst om at importen var vellykket, og til venstre i DB-listen er det et annet (ord).

La oss ta en titt på strukturen fra innsiden slik at du klarere kan forestille deg hva du må forholde deg til.

Klikk på navnet til MySQL Database for Beginners. En liste over tabeller den består av vil vises under den. Klikk på en av dem. Gå deretter til toppmenyen "Struktur". Hovedarbeidsområdet viser strukturen til tabellen: alle kolonnenavn, datatyper og alle attributter.

JOBBER MED EN MySQL DATABASE MED PHP

Foredrag. Utarbeidet av V.S. Prokhorov


1. KOBLE PHP-SCENARIER TIL MySQL-tabeller

La oss vurdere de mest brukte funksjonene som lar deg jobbe med en MySQL-database ved hjelp av PHP.

Når PHP og MySQL samhandler, samhandler programmet med DBMS gjennom et sett med funksjoner.

1.1 Koble til serveren. Funksjon mysql_connect

Før du arbeider med databasen, er det nødvendig å etablere en nettverksforbindelse med den, samt å autorisere brukeren. Dette gjøres ved å bruke mysql_connect () funksjonen.

ressurs mysql_connect (]])

Denne funksjonen etablerer en nettverkstilkobling til MySQL-databasen som ligger på $-serververten (som standard er dette localhost, dvs. gjeldende datamaskin) og returnerer identifikatoren til den åpne tilkoblingen. Alt videre arbeid utføres med denne identifikatoren. Alle andre funksjoner som tar denne identifikatoren (deskriptoren) som et argument vil unikt identifisere den valgte databasen. Ved registrering spesifiseres brukernavnet $ brukernavn og passord $ passord (som standard brukernavnet som gjeldende prosess startes fra - ved feilsøking av skript: root og et tomt passord):

$ dbpasswd = ""; //Passord

// Vis en advarsel

ekko ("

");

Variablene $ dblocation, $ dbuser og $ dbpasswd lagrer servernavn, brukernavn og passord.

1.2 Koble fra serveren. Funksjon mysql_close

Forbindelsen til MySQL-serveren vil automatisk lukkes når skriptet avsluttes, eller når mysql_close-funksjonen kalles

bool mysql_close ()

Denne funksjonen bryter forbindelsen til MySQL-serveren, og returnerer true hvis operasjonen er vellykket og ellers falsk. Funksjonen tar som argument et håndtak til databasetilkoblingen som returneres av mysql_connect-funksjonen.

$ dblocation = "localhost"; // Server navn

$ dbuser = "root"; //Brukernavn

$ dbpasswd = ""; //Passord

// Koble til databaseserveren

// Undertrykk feilutgang med @-symbolet før du kaller opp funksjonen

$ dbcnx = @ mysql_connect ($ dblocation, $ dbuser, $ dbpasswd);

if (! $ dbcnx) // Hvis håndtaket er 0, opprettes ikke forbindelsen

// Vis en advarsel

ekko ("

Databaseserveren er for øyeblikket utilgjengelig, så siden kan ikke vises på riktig måte.");

if (mysql_close ($ dbcnx)) // lukk tilkoblingen

echo ("Databaseforbindelse avsluttet");

echo ("Kan ikke fullføre tilkoblingen");

1.3 Oppretting av en database. CREATE DATABASE-funksjon

Kommandoen - opprett en database er kun tilgjengelig for serveradministratoren, og den kan ikke utføres på de fleste hosting:

LAG DATABASE Databasenavn

Oppretter en ny database med navnet DatabaseName.

Et eksempel på arbeid med denne funksjonen:

@mysql_query ("LAG DATABASE $ dbnavn");

Det anbefales å bruke apostrof ("SQL - kommando") overalt som skilletegn for linjer som inneholder SQL - kommandoer. Dette kan sikre at ingen $ - variabel blir interpolert ved et uhell (dvs. ikke erstattet med verdien), og sikkerheten til skriptene vil øke.

Kommandoen CREATE DATABASE databaseoppretting er kun tilgjengelig for superbrukeren, og på de fleste vertssider er det umulig for en vanlig bruker å utføre den. Den er kun tilgjengelig for serveradministratoren.

For eksperimentering, la oss lage en testbasedatabase ved å kjøre en SQL-spørring fra kommandolinjen. For å gjøre dette, må du logge på MySQL og skrive inn MySQL-kommandolinjen:

mysql> lage database testbase;

Etter det bør du skrive:

mysql> bruk testbase;

Database opprettet:



1.4 Databasevalg. Funksjon mysql_select_db

Før du sender den første spørringen til MySQL-serveren, må du spesifisere hvilken database vi skal jobbe med. Mysql_select_db-funksjonen er ment for dette:

bool mysql_select_db (streng $ database_name [, ressurs $ link_identifier])

Den varsler PHP om at ytterligere operasjoner på $ link_identifier-tilkoblingen vil bruke databasen $ database_name.

Å bruke denne funksjonen tilsvarer å kalle brukskommandoen i en SQL-spørring, det vil si at mysql_select_db-funksjonen velger en database for videre arbeid, og alle påfølgende SQL-spørringer blir brukt på den valgte databasen. Funksjonen tar som argumenter navnet på databasen som skal velges, databasenavn og tilkoblingsbeskrivelseressursen. Funksjonen returnerer true hvis operasjonen er vellykket og usann ellers:

// Database tilkoblingskode

if (! @mysql_select_db ($ dbname, $ dbcnx))

// Vis en advarsel

ekko ("

Databasen er for øyeblikket ikke tilgjengelig, så siden kan ikke vises riktig.");

1.5 Feilhåndtering

Hvis det oppstår feil i prosessen med å jobbe med MySQL (for eksempel parentesene er ikke balansert i spørringen eller det er ikke nok parametere), kan feilmeldingen og nummeret fås ved å bruke følgende to funksjoner.

Det er viktig å bruke disse funksjonene nøye og i tide, for ellers kan det være vanskelig å feilsøke skript.

● Funksjon:

int mysql_errno ()

returnerer nummeret på den siste loggede feilen. Tilkoblingsidentifikatoren $ link_identifier kan utelates hvis bare én tilkobling er etablert under skriptoperasjonen.

● Funksjon:

streng mysql_error ()

returnerer ikke et tall, men en streng som inneholder teksten i feilmeldingen. Det er nyttig for feilsøkingsformål. Vanligvis brukes mysql_error i forbindelse med eller die ()-konstruksjonen, for eksempel:

@mysql_connect ("localhost", "bruker", "passord")

or die ("Feil under tilkobling til databasen:" .mysql_error ());

@-operatøren tjener som vanlig til å undertrykke standardadvarselen som kan oppstå i tilfelle feil.

I nyere versjoner av PHP logges ikke MySQL-funksjonsvarsler som standard.

1.6 Automatisering av tilkobling til MySQL. Fil ( config.php )

Vanligvis er det flere skript på nettstedet som trenger tilgang til samme database.

Det anbefales å skille koden som er ansvarlig for å koble til MySQL inn i en egen fil, og deretter inkludere den med de nødvendige skriptene ved å bruke include-funksjonen.

Det er fornuftig å legge funksjonene for å koble til, velge og lage en database i samme fil (config.php) der variabler med servernavnet $ dblocation, brukernavn $ dbuser, passord $ dbpasswd og databasenavn $ dbname er deklarert:

Oppføring config.php:

//config.php-koden til filen som inneholder parameterne for å koble til serveren og velge databasen

// skriver ut tilkoblingsfeilmeldinger til nettleseren

$ dblocation = "localhost"; // Server navn

$ dbname = "sett inn databasenavn" // Databasenavn: opprettet eller allerede eksisterende

$ dbuser = "root"; // Database brukernavn

$ dbpasswd = ""; //Passord

// Koble til databaseserveren

// Undertrykk feilutgang med @-symbolet før du kaller opp funksjonen

[e-postbeskyttet] _connect ($ dblocation, $ dbuser, $ dbpasswd);

if (! $ dbcnx) // Hvis håndtaket er 0, er tilkoblingen til databaseserveren ikke etablert

// Vis en advarsel

ekko ("

Databaseserveren er for øyeblikket ikke tilgjengelig, så siden kan ikke vises riktig.

");

// Lag database $ dbname - bare superbruker kan gjøre dette

// Hvis databasen allerede eksisterer, vil det være en ikke-fatal feil

@mysql_query ("LAG DATABASE hvis ikke eksisterer $ dbname ');

// Kode for å koble til databasen: vi velger entydig en nyopprettet database eller en eksisterende database

// Undertrykk feilutgang med @-symbolet før du kaller opp funksjonen

hvis ( [e-postbeskyttet] _select_db ($ dbname, $ dbcnx)) // Hvis beskrivelsen er 0, er ingen databaseforbindelse opprettet

// Vis en advarsel

ekko ("

Databasen er for øyeblikket ikke tilgjengelig, så siden kan ikke vises riktig.

");

// En liten hjelpefunksjon som skriver ut en melding

// om en feil i tilfelle en databasespørringsfeil

funksjonsfeil ($-melding)

ekko ("");



2. UPPFYLLING AV FORESPØRSEL TIL DATABASEN

2.1 Opprette en tabell. Funksjon LAG TABELL:

LAG TABELL Tabellnavn (feltnavntype, feltnavntype,)

Denne kommandoen oppretter en ny tabell i databasen med kolonner (felt) definert av deres navn (FieldName) og de angitte typene. Etter å ha opprettet en tabell, kan du legge til poster i den, som består av feltene som er oppført i denne kommandoen.

Oppføring test_11.php. Programmet som lager en ny tabell i databasen:

inkludere "config.php"; // Koble til serveren og velg databasen

mysql_query ("LAG TABELL hvis det ikke finnes personer

ID INT AUTO_INCREMENT PRIMÆR NØKKEL,

eller dø ("MySQL-feil:" .mysql_error ());



Dette skriptet oppretter en ny persontabell med to felt. Det første feltet er av typen INT (heltall) og navnet er id. Den andre er TEXT-typen (tekststreng) og navnenavnet.

Hvis tabellen eksisterer, vil eller die () bli utløst.

Den valgfrie if not exists-klausulen, hvis spesifisert, forteller MySQL-serveren om ikke å generere en feilmelding hvis en tabell med det angitte navnet allerede eksisterer i databasen.

Optimal bruk av MySQL

Introduksjon

For å begynne å jobbe med MySQL, må du laste ned denne databasen, installere, konfigurere og studere dokumentasjonen.

I prosessen med å tilby hostingtjenester tar vi hensyn til de vanligste feilene som brukere gjør når de utvikler sine virtuelle servere. En av de "harde" stedene for en typisk webmaster er å jobbe med en MySQL-server. Vanligvis utføres studiet av prinsippene for SQL-funksjon og metoder for å jobbe med databaser i henhold til litteraturen, hvorfra kun de tingene som er relevante på lesetidspunktet velges - hvordan koble til databasen, hvordan lage en spørring, hvordan du oppdaterer informasjon eller legger til en ny post i databasen, og så videre.

Denne tilnærmingen gir selvfølgelig det ønskede resultatet – grensesnittene til brukerens nettside ender opp med å bli integrert med databasen. Det er imidlertid ikke alltid brukere tenker på hvor optimalt databasen deres fungerer, hvordan de kan optimalisere prosessene som skjer når de jobber med MySQL, og hvordan fungerer en virtuell server med økt belastning, "tilstrømning" av brukere som resultat, for eksempel på "promotering" av nettstedet.

Denne artikkelen vil hjelpe deg med å optimalisere arbeidet ditt med MySQL DBMS. Det presenterte materialet hevder ikke å være en detaljert beskrivelse av MySQL-optimalisering generelt, men trekker bare oppmerksomheten mot de hyppigste feilene brukerne gjør og forteller hvordan de kan unngås. Du kan lære mer om vanskelighetene med å konfigurere MySQL på spesialiserte sider, lenker til disse er gitt på slutten av denne artikkelen.

Hvilke data må lagres i MySQL

Ikke prøv å legge all informasjonen du har i databasen. Du trenger for eksempel ikke lagre bilder der, selv om MySQL tillater det. Ved å plassere binære bilder av grafikkfiler i databasen, vil du bare bremse serveren din. Å lese en fil med et bilde fra disk er mye enklere og, med tanke på forbrukte ressurser, mer økonomisk enn å koble fra et skript til SQL, lage en forespørsel, hente et bilde, behandle det og, etter å ha utstedt de nødvendige http-hodene, vise det til en webserverbesøkende. I det andre tilfellet vil operasjonen med å vise et bilde kreve flere ganger flere ressurser av prosessoren, minnet og disken. Det er også verdt å huske at det er mekanismer for å bufre nettdokumenter som lar brukeren spare trafikk, og med dynamisk innholdsgenerering fratar du faktisk de besøkende denne praktiske muligheten.

I stedet for bilder er det bedre å lagre informasjon i MySQL, på grunnlag av dette kan du generere lenker til statiske bilder i dokumenter som er dynamisk opprettet av skript.

Optimalisering av spørringer

I situasjoner der du virkelig trenger å få bare en viss del av data fra MySQL, kan du bruke LIMIT-tasten for SELECT-funksjonen. Dette er nyttig når du for eksempel vil vise resultatene av et søk etter noe i databasen. La oss si at databasen inneholder en liste over produkter som nettbutikken din tilbyr. Det er noe umenneskelig å vise hele listen over varer i ønsket kategori i forhold til brukeren - ikke alle har raske kommunikasjonskanaler med Internett, og utstedelse av hundre kilobyte ekstra med informasjon tvinger ofte brukeren til å bruke mer enn én minutt venter på sideinnlastingsresultatene. I slike situasjoner gis informasjon i deler av for eksempel 10 stillinger. Det er feil å velge all informasjon fra databasen og filtrere utdataene etter skriptet. Det ville være mye mer optimalt å gjøre en spørring av skjemaet

velg bra, pris fra bøker grense 20,10

Som et resultat vil MySQL "gi" deg 10 poster fra databasen fra og med 20. posisjon. Etter å ha gitt resultatet til brukeren, lag koblinger "Neste 10 produkter", og send neste posisjon til skriptet som en parameter, hvorfra listen over produkter vil vises, og bruk dette nummeret når du genererer en spørring til MySQL.

Det bør også huskes at når du skriver databasespørringer (SQL-spørringer), bør du bare be om den informasjonen du virkelig trenger. For eksempel, hvis det er 10 felt i databasen, og for øyeblikket trenger du virkelig bare å få to av dem, i stedet for en spørring

velg * fra tabellnavn

bruk en konstruksjon som

velg felt1, felt2 fra tabellnavn

Dermed vil du ikke overbelaste MySQL med unødvendig arbeid, ta opp ekstra minne og utføre ytterligere diskoperasjoner.

Du bør også bruke WHERE-tasten der du trenger å få informasjon som samsvarer med en bestemt mal. For eksempel, hvis du trenger å hente fra grunnfeltene med navn på bøker skrevet av Ivanov, bør du bruke en konstruksjon som

velg tittel fra bøker der forfatter = "Ivanov"

Det er også en LIKE-tast som lar deg søke etter felt hvis verdier er "lik" til et gitt mønster:

velg tittel fra bøker der forfatter som "Ivanov%"

I dette tilfellet vil MySQL vise titlene på bøker hvis forfatterfeltverdier starter med "Ivanov"

.

Ressurskrevende drift

Imidlertid bør det huskes at det er operasjoner, som i seg selv krever mer ressurser enn for vanlige spørringer. For eksempel bruker en DISTINCT-operasjon på en SELECT-funksjon mye mer CPU-tid enn en vanlig SELECT. DISTINCT prøver å finne unike verdier, og gjør ofte mange sammenligninger, erstatninger og beregninger. Dessuten, jo større datamengden som DISTINCT brukes på (tross alt vokser databasen din over tid), jo saktere vil en slik forespørsel bli utført og veksten av ressursene som trengs for å utføre en slik funksjon vil være langt fra direkte proporsjonal med volumet av lagrede og behandlede data, men mye raskere.

Indekser

Indekser brukes for raskere søk etter verdien av ett av feltene. Hvis ingen indeks opprettes, skanner MySQL alle feltene sekvensielt fra den aller første posten til den aller siste, og sammenligner den valgte verdien med originalen. Jo større tabellen og jo flere felt den inneholder, jo lengre tid tar utvalget. Hvis en gitt tabell har en indeks på den aktuelle kolonnen, kan MySQL raskt posisjonere seg til den fysiske plasseringen av dataene uten å måtte gjøre en full tabellskanning. For eksempel, hvis tabellen består av 1000 rader, vil søkehastigheten være minst 100 ganger raskere. Denne hastigheten vil være enda høyere hvis det er behov for å adressere alle 1000 kolonnene samtidig, pga i dette tilfellet er det ingen tid bortkastet for å plassere harddisken.

I hvilke situasjoner er det tilrådelig å lage en indeks:

  1. Hurtigsøk etter rader når du bruker WHERE-leddet
  2. Finn rader fra andre tabeller når du utfører en sammenføyning
  3. Finne MIN () eller MAX () verdien for et indeksert felt
  4. Sortering eller gruppering av tabellen i tilfelle et indeksert felt brukes
  5. I noen tilfeller er behovet for å få tilgang til datafilen helt borte. Hvis alle brukte felter for en tabell er numeriske og danner en venstresidig indeks for en nøkkel, kan verdiene returneres helt fra indekstreet i en mye raskere hastighet.
  6. Hvis spørsmål som
    VELG * FRA tbl_name WHERE col1 = val1 OG col2 = val2;
    og det er en blandet indeks for col1 og col2, så vil dataene bli returnert direkte. Hvis det opprettes separate indekser for col1 og col2, vil optimalisereren prøve å finne den mest begrensede indeksen ved å bestemme hvilken indeks som kan finne færre rader, og vil bruke den indeksen til å hente dataene.
    Hvis tabellen har en blandet indeks, vil enhver venstresidet match mot den eksisterende indeksen bli brukt. For eksempel, hvis det er en blandet indeks på 3 felt (col1, col2, col3), så kan indekssøket utføres på feltene (col1), (col1, col2) og (col1, col2, col3).

Mer om indeksering

Tilkoblingsstøtte

Som du sikkert vet, for å jobbe med MySQL-serveren, må du først opprette en forbindelse med den, oppgi brukernavn og passord. Prosessen med å etablere en tilkobling kan ta mye lengre tid enn den direkte behandlingen av en forespørsel til databasen etter at tilkoblingen er etablert. Etter logikken er det nødvendig å unngå unødvendige tilkoblinger til databasen, uten å koble fra den der det kan gjøres, hvis du i fremtiden planlegger å fortsette å jobbe med SQL-serveren. For eksempel, hvis skriptet ditt har opprettet en tilkobling til databasen, foretatt et utvalg data for analyse, trenger du ikke lukke tilkoblingen til databasen hvis du planlegger å plassere analyseresultatene i databasen under driften av den samme. manus.

Det er også mulig å opprettholde den såkalte vedvarende (vedvarende) forbindelsen til databasen, men dette er fullt mulig ved bruk av mer komplekse programmeringsmiljøer enn php eller perl i normal CGI-modus, når tolken av det tilsvarende språket startes av webserver én gang for å oppfylle den innkommende forespørselen.