Optimal bruk av MySQL. MySQL-funksjoner og -applikasjoner

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 selvlagde motorer bygget med hennes deltakelse.

Generelt kan du ikke klare deg uten denne plattformen. Men for å studere det trenger du også den riktige tilnærmingen, 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, 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" ganske mye i hele utvalget av MySQL-skall 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 rett etter en enkel og forståelig installasjon. I tillegg inkluderer Denwer flere andre 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 installasjonen, har du bare tid til å trykke på de nødvendige tastene. Akkurat det du trenger i dummy-versjonen av MySQL.

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

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

Ved å klikke på lenken http://downloads.mysql.com/docs/world.sql.zip, vil du laste ned en prøvedatabase 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"), sett verdien "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 se 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.

Databasedrift blir veldig ofte en flaskehals i gjennomføringen av et nettprosjekt. Optimaliseringsproblemer i slike tilfeller er ikke begrenset til databaseadministratoren. Programmerere må strukturere tabeller på riktig måte, skrive bedre spørringer og skrive mer effektiv kode. Denne artikkelen gir en kort liste over MySQL-optimaliseringsteknikker for programmerere.

1. Optimaliser søkene dine for spørringsbufferen.

De fleste MySQL-servere bruker spørringsbufring. Det er en av de mest effektive ytelsesforbedrende teknikkene som databasemotoren kjører i bakgrunnen. Hvis spørringen utføres mange ganger, begynner cachen å bli brukt for å oppnå resultatet og operasjonen går mye raskere.

Problemet er at det er så enkelt og likevel skjult for utvikleren, og de fleste programmerere ignorerer denne flotte muligheten til å forbedre prosjektytelsen. Visse aktiviteter kan faktisk skape hindringer for bruken av spørringsbufferen under kjøring.

// Spørringsbufferen FUNGERER IKKE $ r = mysql_query ("VELG brukernavn FRA bruker WHERE signup_date> = CURDATE ()"); // Be om cache FUNGERER! $ i dag = dato ("Å-m-d"); $ r = mysql_query ("VELG brukernavn FRA bruker WHERE signup_date> =" $ i dag "");

Grunnen til at spørringsbufferen ikke fungerer i det første tilfellet er på grunn av bruken av funksjonen CURDATE ()... Denne tilnærmingen brukes for alle ikke-deterministiske funksjoner som NÅ (), RAND (), etc. Siden returresultatet av funksjonen kan endres, bestemmer MySQL seg for ikke å bufre denne spørringen. Alt som trengs for å fikse situasjonen er å legge til en ekstra linje med PHP-kode før forespørselen.

2. Bruk EXPLAIN for SELECT-spørringene

Ved å bruke EXPLAIN-nøkkelordet kan du få et bilde av hva MySQL gjør for å oppfylle søket ditt. Dette bildet gjør det enkelt å identifisere flaskehalser og andre problemer i spørringer eller tabellstruktur.

Resultatet av en EXPLAIN-spørring viser hvilke indekser som er i bruk, hvordan tabellen skannes og sorteres, og så videre.

Ta et SELECT-søk (helst komplekst, med JOIN), legg til EXPLAIN-nøkkelordet foran det. Du kan bruke PhpMyAdmin til dette. En slik spørring vil gi resultatet til en vakker tabell. La oss si at vi har glemt å legge til en indeks på kolonnen som brukes for JOIN:

Etter å ha lagt til indeksen for group_id-feltet:

Nå i stedet for å skanne 7883 rader, vil bare 9 og 16 rader fra to tabeller bli skannet. En god metode for å evaluere ytelsen er å multiplisere alle tallene i kolonnen "rader". Resultatet er omtrent proporsjonalt med mengden data som behandles.

3. Bruk LIMIT 1 hvis du trenger å få en unik streng

Noen ganger, mens du bruker et søk, vet du allerede at du bare ser etter én rad. Du kan få en unik post, eller du kan ganske enkelt sjekke om det finnes et hvilket som helst antall poster som tilfredsstiller WHERE-klausulen.

I et slikt tilfelle kan det å legge til LIMIT 1 i søket ditt forbedre ytelsen. Under denne tilstanden stopper databasemotoren å skanne poster så snart den finner en og går ikke gjennom hele tabellen eller indeksen.

// Er det noen bruker fra Alabama? // Ikke gjør dette: $ r = mysql_query ("SELECT * FROM user WHERE state =" Alabama ""); if (mysql_num_rows ($ r)> 0) (// ...) // Dette er mye bedre: $ r = mysql_query ("SELECT 1 FROM user WHERE state =" Alabama "LIMIT 1"); if (mysql_num_rows ($ r)> 0) (// ...)

4. Indeks søkefelt

Indekser mer enn primærnøkler og unike nøkler. Hvis noen kolonner i tabellen din brukes til søk, må de indekseres.

Som du kan se, gjelder denne regelen også for søk innenfor en del av en streng, for eksempel "last_name LIKE' a% '". Når begynnelsen av en streng brukes til søk, kan MySQL bruke indeksen til kolonnen det søkes i.

Du bør også finne ut hva slags søk du ikke kan bruke vanlig indeksering til. Hvis du for eksempel søker etter ordet ("WHERE post_content LIKE'% apple% ''"), vil ikke fordelene med indeksering være tilgjengelige. I slike tilfeller er det bedre å bruke mysql fulltekstsøk eller bygge dine egne indekseringsbaserte løsninger.

5. Indeksering og bruk av de samme typene for koblede kolonner

Hvis applikasjonen din inneholder mange JOIN-spørringer, må du indeksere kolonnene som er koblet sammen i begge tabellene. Dette har en effekt på de interne optimaliseringene av MySQL-bindinger.

Dessuten må kolonnene som skal bindes være av samme type. Hvis du for eksempel kobler en DESIMAL-kolonne til en INT-kolonne fra en annen tabell, vil ikke MySQL kunne bruke indeksen på minst én av de to tabellene. Til og med tegnkodingen må være den samme for samme strengtypekolonner.

// Søk etter et selskap fra en spesifikk tilstand $ r = mysql_query ("VELG firmanavn FRA brukere LEFT JOIN company ON (users.state = companies.state) WHERE users.id = $ user_id"); // begge tilstandskolonnene må indekseres // og begge må være av samme type og tegnkoding // eller MySQL vil gjøre en full tabellskanning

6. Ikke bruk ORDER BY RAND ()

Dette er et av de kule triksene, og mange nybegynnere går i fellen. De kan ikke engang forestille seg hvilket forferdelig problem de skaper for seg selv ved å bruke dette uttrykket i sine spørsmål.

Hvis du virkelig trenger å randomisere rader som et resultat av søket ditt, er det mange bedre måter å gjøre dette på. Selvfølgelig vil dette gjøres med tilleggskode, men du vil bli reddet fra et problem som vokser eksponentielt med veksten av data. Poenget er at MySQL utfører en RAND () operasjon (som tar CPU-tid) på hver eneste rad i tabellen før den sorterer den og gir deg bare én rad.

// Dette er IKKE NØDVENDIG: $ r = mysql_query ("VELG brukernavn FRA bruker ORDER BY RAND () LIMIT 1"); // Dette vil fungere bedre: $ r = mysql_query ("SELECT count (*) FROM user"); $ d = mysql_fetch_row ($ r); $ rand = mt_rand (0, $ d - 1); $ r = mysql_query ("VELG brukernavn FRA brukergrense $ rand, 1");

Dette gir deg et tilfeldig tall som er mindre enn antall rader i spørringen og bruker det som en forskyvning i LIMIT-leddet.

7. Prøv å ikke bruke SELECT *

Jo mer data som leses fra tabellen, desto tregere kjører spørringen. Slike operasjoner tar også tid å fullføre diskoperasjoner. Og hvis databaseserveren er atskilt fra webserveren, vil latens også være forårsaket av overføring av data over nettverket mellom serverne.

Det er en god vane å spesifisere en kolonne når du gjør SELECT.

// Dårlig: $ r = mysql_query ("SELECT * FROM user WHERE user_id = 1"); $ d = mysql_fetch_assoc ($ r); echo "Velkommen ($ d [" brukernavn "])"; // Dette er bedre: $ r = mysql_query ("VELG brukernavn FRA bruker WHERE user_id = 1"); $ d = mysql_fetch_assoc ($ r); echo "Velkommen ($ d [" brukernavn "])"; // Forskjellen blir betydelig på store datamengder

8. Prøv å bruke id-feltet overalt

Det er god praksis å bruke et id-felt i hver tabell som er satt til PRIMARY KEY, AUTO_INCREMENT og er av typen INT. Helst USIGNERT, da verdien i dette tilfellet ikke kan være negativ.

Selv om tabellen har et felt med et unikt brukernavn, ikke gjør det til primærnøkkelen. VARCHAR-felt er trege til å fungere som primærnøkler. Strukturen til databasen din vil også bli bedre hvis du bruker referanser til poster basert på id inne i den.

I tillegg bruker MySQL-motoren primærnøkler til sine interne oppgaver, og bruken av id-feltet skaper optimale forhold for deres løsning.

Et mulig unntak fra denne regelen er "assosiative tabeller", som brukes for mange-til-mange-relasjoner mellom to andre tabeller. For eksempel inneholder «posts_tags»-tabellen 2 kolonner: post_id, tag_id. De brukes til å beskrive forholdet mellom to tabeller "post" og "tags". Den beskrevne tabellen kan ha en primærnøkkel som inneholder begge id-feltene.

9. Bruk ENUM i stedet for VARCHAR

// Lag en forberedt setning hvis ($ stmt = $ mysqli-> prepare ("SELECT brukernavn FROM bruker WHERE state =?")) (// Bind parametere $ stmt-> bind_param ("s", $ state); // Utfør $ stmt-> execute (); // Bind resultatvariablene $ stmt-> bind_result ($ brukernavn); // Få verdiene ​​$ stmt-> hent (); printf ("% s er fra% s \ n", $ brukernavn, $ stat); $ stmt-> lukk ();)

13. Ubuffrede forespørsler

Vanligvis, når du utfører en forespørsel fra et skript, blir skriptet avbrutt til forespørselen er fullført. Denne rekkefølgen kan endres ved å bruke ubuffrede forespørsler.

Flott forklaring av mysql_unbuffered_query ()-funksjonen fra PHP-dokumentasjonen:

"Mysql_unbuffered_query () sender en SQL-spørring til MySQL-serveren uten å automatisk hente og bufre resultatrader, slik funksjonen mysql_query () gjør. Dette sparer en viss mengde minne med SQL-spørringer som produserer et stort sett med resultater, og du kan begynne å jobbe med resultatsettet så snart den første raden er mottatt, uten å vente på at SQL-spørringen skal fullføres."

Det er imidlertid flere begrensninger. Du må enten lese alle linjer eller ringe mysql_free_result () før du utfører neste spørring. Du kan heller ikke bruke mysql_num_rows () eller mysql_data_seek () på et resultatsett.

14. Lagre IP-adressen som USIGNERT INT

Mange programmerere lager et VARCHAR (15)-felt for å lagre en IP-adresse, uten engang å tenke på hva de vil lagre en heltallsverdi i dette feltet. Bruker du INT vil feltet reduseres til 4 byte og ha en fast lengde.

Du må bruke UNSIGNED INT-typen, siden IP-adressen bruker alle 32 biter av et usignert heltall.

$ r = "OPPDATERING brukere SET ip = INET_ATON (" ($ _ SERVER ["REMOTE_ADDR") ") WHERE user_id = $ user_id";

15. Tabeller med fast postlengde (Statisk) er raskere

Når hver enkelt kolonne i en tabell har en fast lengde, anses hele tabellen som helhet som "statisk" eller "fast lengde". Eksempler på kolonnetyper som ikke har fast lengde: VARCHAR, TEXT, BLOB. Hvis du inkluderer minst én kolonne av denne typen, anses ikke tabellen lenger som "statisk" og vil bli håndtert annerledes av MySQL-motoren.

"Statiske" tabeller behandles raskere av MySQL-motoren når du slår opp poster. Når du trenger å lese en spesifikk post i tabellen, beregnes dens posisjon raskt. Hvis størrelsen på strengen ikke er fast, tar det tid å finne posisjonen til posten og samsvare med indeksen til primærnøkkelen.

Slike tabeller er også lettere å cache og lettere å gjenopprette etter feil. Men de kan ta mer plass. For eksempel, hvis du konverterer et VARCHAR (20)-felt til et CHAR (20)-felt, vil alltid 20 byte være opptatt, uansett om de brukes eller ikke.

Ved å bruke Vertical Split-teknikken kan du dele kolonner med variabel lengde i en separat tabell.

16. Vertikal separasjon

Vertikal splitting er handlingen å dele en tabellstruktur vertikalt for optimaliseringsformål.

Eksempel 1: Du har en tabell som inneholder hjemmeadresser som sjelden brukes i en applikasjon. Du kan dele tabellen og lagre adressene i en egen tabell. Dette vil redusere hovedbrukertabellen i størrelse. Som du vet, behandles en mindre tabell raskere.

Eksempel 2: Du har et «last_login»-felt i tabellen. Den oppdateres hver gang en bruker registrerer seg på siden. Men hver oppdatering av tabellen fører til at spørringen bufres, noe som kan skape en systemoverbelastning. Du kan markere dette feltet til en annen tabell for å gjøre oppdateringer til brukertabellen sjeldnere.

Men du må sørge for at du ikke trenger å permanent koble sammen de to tabellene du nettopp delte, da dette kan føre til ytelsesforringelse.

17. Skill store DELETE- eller INSERT-setninger

Hvis du trenger å utføre en stor DELETE- eller INSERT-setning på et live-nettsted, må du være forsiktig så du ikke forstyrrer trafikken. Når et stort søk utføres, kan det låse tabellene dine og få programmet til å stoppe.

Apache kjører mange samtidige prosesser / tråder. av denne grunn fungerer det mer effektivt når skriptet er ferdig utført så raskt som mulig, slik at serveren ikke bruker for mange åpne tilkoblinger og prosesser som bruker ressurser, spesielt minne.

Hvis du låser tabeller for en lengre periode (for eksempel 30 sekunder eller mer) på en høyt belastet nettserver, kan du forårsake en opphopning av prosesser og forespørsler, som vil ta betydelig tid å fjerne eller til og med stoppe Internett server.

Hvis du har et skript som sletter et stort antall poster, bruker du bare LIMIT-klausulen for å dele det opp i små grupper for å unngå denne situasjonen.

While (1) (mysql_query ("DELETE FROM logger WHERE log_date<= "2009-10-01" LIMIT 10000"); if (mysql_affected_rows() == 0) { // выполняем удаление break; } // вы можете сделать небольшую паузу usleep(50000); }

18. Små kolonner behandles raskere

For databasemotoren er disk den viktigste flaskehalsen. Å strebe etter å holde ting slankere og mindre fungerer vanligvis bra for ytelsen ved å redusere mengden data som flyttes.

MySQL-dokumentasjonen inneholder en liste over lagringsstandarder for alle typer.

Hvis tabellen bare vil inneholde noen få rader, er det ingen grunn til å lage primærnøkkelen av typen INT og ikke MEDIUMINT, SMALLINT eller til og med TINYINT. hvis du bare vil ha en dato, bruk DATO i stedet for DATOTIME.

Du trenger bare å huske på vekstmulighetene.

19. Velg riktig lagringsmotor

Det er to hovedlagringsmotorer for MySQL: MyISAM og InnoDB. Hver har sine egne fordeler og ulemper.

MyISAM er flott for lesetunge applikasjoner, men den skalerer ikke godt med mange poster. Selv om du oppdaterer ett felt i en rad, er hele tabellen låst og ingen prosess kan lese noe før spørringen er fullført. MyISAM utfører raske beregninger for spørringer som SELECT COUNT (*).

InnoDB er en mer kompleks lagringsmotor og kan være tregere enn MyISAM for de fleste små applikasjoner. Men den støtter radlåsing, noe som er bedre for tabellskalering. Den støtter også noen tilleggsfunksjoner som transaksjoner.

20.Bruk objektrelasjonell kartlegging

Det er flere fordeler med å bruke Object Relational Mapper (ORM). Alt som kan gjøres i en ORM kan gjøres manuelt, men med mer innsats og høyere krav til utviklere.

ORM er flott for lat lasting. Dette betyr at du kan få verdier når du trenger dem. Men du må være forsiktig, fordi du kan lage mange små spørringer som vil forringe ytelsen.

ORM kan også samle forespørslene dine til transaksjoner som er betydelig raskere enn individuelle databasespørringer.

For PHP kan du bruke ORM Doctrine.

21. Vær forsiktig med vedvarende tilkoblinger

Vedvarende tilkoblinger er designet for å redusere tap av gjenoppretting av tilkoblinger til MySQL. Når en vedvarende tilkobling opprettes, forblir den åpen selv etter at skriptet er ferdig. Siden Apache gjenbruker underordnede prosesser, kjøres prosessen for det nye skriptet, og det bruker den samme MySQL-tilkoblingen.

Dette høres bra ut i teorien. Men i virkeligheten er denne funksjonen ikke verdt en kobberkrone på grunn av problemene. Det kan forårsake alvorlige problemer med tilkoblingsgrenser, minneoverflyt og så videre.

Apache opererer på prinsippet om samtidighet og skaper mange barneprosesser. Dette er grunnen til at vedvarende tilkoblinger ikke fungerer som forventet på et gitt system. Sjekk med systemadministratoren din før du bruker mysql_pconnect ()-funksjonen.

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 servernavnet, brukernavnet og passordet.

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 beskrivelsen 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 på de fleste hostinger kan den ikke utføres:

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 å eksperimentere, 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, fordi ellers kan det være vanskelig å feilsøke skriptene dine.

● 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 feil i databasespørringen

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 server og velg database

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 () avfyres.

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.

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å grunn av funksjonssvikt (la oss bare ta forbehold om at MySQL-utviklerne lover å legge til de manglende funksjonene i neste omgang versjoner 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 hverdagsoppgaver 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 hvis noen av spørringene som er inkludert i denne enheten mislykkes, kan du rulle tilbake for å returnere dataene til sin 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 trigger utløses og enten rulle tilbake eller sende en melding til DBA.

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. Deretter 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 en database 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.

Åpen kildekode. 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, gå ganske enkelt til 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 har aldri (i motsetning til de samme webserverne) kommet over en melding om at MySQL har blitt skadet som følge 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 vil jobbe med, for eksempel med Linux eller Windows, men selv om du bytter ut 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 spørringsveiviseren, 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, lage 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 med å løse problemet ditt.
  • MySQLImport - Importerer data fra en avgrenset fil til databasen.
  • MySQLShow - viser strukturen til databaser og tabeller som de er sammensatt av.

Jeg vil trekke leserens oppmerksomhet til følgende: nå er det programmer som fungerer gjennom CGI-grensesnittet, som gir en nesten 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 til 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 funksjonen Unix_TIMESTAMP () gjeldende tid, som vi trekker en dag fra.

applikasjon

Etter forfatterens mening er Internett den mest passende applikasjonssfæren for MySQL, 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. Erfaring viser imidlertid at MySQL har nok muligheter for enkle internettprosjekter.

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 på databasebruken 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 hvis noen legger inn en ordre, så må alle forespørsler (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 nå 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), samt bruk av lagrede prosedyrer og triggere. Akk, MySQL gjør oss ikke glade her heller.

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

MySQL er en type relasjonsdatabase. MySQL er en server som ulike brukere kan koble seg til.

Når du kobler til Internett, skriver du inn brukernavn og passord, samt navnet på serveren du kobler til? Det samme systemet brukes når du arbeider med MySQL.

Et annet poeng: hva er en relasjonsdatabase? Relasjonell betyr tabellbasert. Microsofts berømte regnearkredaktør Excel er faktisk en relasjonsdatabaseredigerer.

Kobler til MySQL Server

PHP bruker funksjonen mysqli_connect () for å koble til en MySQL-server. Denne funksjonen tar tre argumenter: servernavn, brukernavn og passord.

Mysqli_connect ()-funksjonen returnerer tilkoblingsidentifikatoren, den lagres i en variabel og brukes senere til å jobbe med databaser.

MySQL-servertilkoblingskode:

$ link = mysqli_connect ("localhost", "root", "");

I dette tilfellet jobber jeg på min lokale maskin på Denwere, så vertsnavnet er localhost, brukernavnet er root, og det er ikke noe passord.

Du må også lukke forbindelsen etter at du er ferdig med å jobbe med MySQL. Mysqli_close ()-funksjonen brukes til å lukke forbindelsen. Utvider eksempelet:

$ link = mysqli_connect ("localhost", "root", ""); if (! $ link) die ("Feil"); mysqli_close ($-lenke);

Her sjekket vi tilkoblingsidentifikatoren for sannhet, hvis noe er galt med tilkoblingen vår, vil ikke programmet bli utført, funksjonen die () vil stoppe utførelsen og vise en feilmelding i nettleseren.

Tilkoblingsfeil

Følgende funksjoner brukes til å kontrollere tilkoblingen:

  • mysqli_connect_errno () - Returnerer feilkoden for siste tilkoblingsforsøk. Returnerer null hvis det ikke er noen feil.
  • mysqli_connect_error () - Returnerer en beskrivelse av den siste feilen ved tilkobling til MySQL-serveren.
definere ("HOST", "localhost"); definere ("DB_USER", "root"); definere ("DB_PASSWORD", ""); definere ("DB", "tester"); $ link = mysqli_connect (HOST, DB_USER, DB_PASSWORD, DB); / * sjekk tilkoblingen * / if (mysqli_connect_errno ()) (printf ("Kunnet ikke koble til:% s \ n", mysqli_connect_error ()); exit ();) else (printf ("Kunnet ikke koble til:% s \ n" , mysqli_get_host_info ($ link));)

Mysqli_get_host_info () returnerer en streng som inneholder typen tilkobling som brukes.

Vær også oppmerksom på at ved å bruke define-kommandoen lagret jeg alle tilkoblingsparametrene i konstanter. Når du skriver store prosjekter, og det vil være mange filer koblet til MySQL-serveren, er det praktisk å lagre tilkoblingsparametrene i en egen fil og sette den inn ved å bruke funksjonen include eller require.

Databasevalg

Det kan være flere databaser på en MySQL-server. Først av alt må vi velge basen vi trenger for arbeid. PHP har en parameter til for dette i funksjonen mysqli_connect () - navnet på databasen.

Jeg opprettet den på datamaskinen min via phpMyAdmin kalt tester. Vi kobler til det:

$ link = mysqli_connect ("localhost", "root", "", "tester"); if (! $ link) die ("Feil"); mysql_close ($-lenke);

Så vi har valgt en database å jobbe med. Men som vi vet består en relasjonsdatabase av tabeller, og vår database har ennå ikke tabeller. Databasen er opprettet tom, ingen tabeller. Tabeller må legges til den separat. La oss legge til en tabell ved hjelp av PHP.

Lag en tabell

I navnet til MySQL-databaser står SQL-delen for Structured Query Language, som oversettes som strukturert spørringsspråk. Vi vil skrive spørringer i SQL og sende dem til MySQL-serveren fra PHP-programmet.

For å lage en tabell trenger vi bare å spesifisere CREATE TABLE-kommandoen. La oss lage en tabell som heter brukere i kolonnene der brukernes pålogginger (påloggingskolonnen) og passord (passordkolonnen) vil bli lagret.

$ query = "LAG TABELL-brukere (pålogging VARCHAR (20), passord VARCHAR (20))";

I denne koden har vi tildelt spørringsvariabelen $ en tekststreng som representerer en SQL-spørring. Vi oppretter en tabell med navn brukere som inneholder to kolonner pålogging og passord, som begge har en VARCHAR (20) datatype. Vi skal snakke om datatyper senere, for nå vil jeg bare merke meg at VARCHAR (20) er en streng med en maksimal lengde på 20 tegn.

For å sende spørringen vår til MySQL-serveren bruker vi PHP-funksjonen mysqli_query (). Denne funksjonen returnerer et positivt tall hvis operasjonen var vellykket og falsk hvis det oppsto en feil (syntaksen til forespørselen er feil eller programmet har ikke tillatelse til å utføre forespørselen).

$ link = mysqli_connect ("localhost", "root", "", "tester"); if (! $ link) die ("Feil"); $ query = "LAG TABELL-brukere (pålogging VARCHAR (20), passord VARCHAR (20))"; mysqli_query ($-spørring); mysqli_close ($-lenke);

SQL-spørringen trenger ikke å skrives til en variabel, den kan skrives direkte som et argument til funksjonen mysql_query (). Det er bare det at koden ser mer lesbar ut.

Dette skriptet har en ulempe - det sender ikke ut noe til nettleseren. La oss legge til en melding:

$ link = mysqli_connect ("localhost", "root", "", "tester"); if (! $ link) die ("Feil"); $ query = "LAG TABELL-brukere (pålogging VARCHAR (20), passord VARCHAR (20))"; if (mysqli_query ($ spørring)) echo "Tabellen er opprettet."; else echo "Tabellen ble ikke opprettet."; mysqli_close ($-lenke);

Hvis vi kjører dette skriptet på nytt for kjøring, vil vi se en melding i nettleseren: "Tabellen ble ikke opprettet." Faktum er at tabellen ble opprettet ved første start, og det er umulig å gjenskape tabellen med samme navn. Vi står overfor en feilsituasjon, så det er på tide å snakke om feilhåndtering når du jobber med MySQL.

Feil under behandling

Når du feilsøker et program, kan det hende vi trenger nøyaktig informasjon om feilen. Når det oppstår en feil i MySQL, setter databaseserveren feilnummeret og en streng som beskriver feilen. PHP har spesielle funksjoner for å få tilgang til disse dataene.

  • mysqli_errno () - Returnerer feilnummeret.
  • mysqli_error () - Returnerer en streng som beskriver feilen.

La oss nå legge til funksjonen mysql_error () til skriptet vårt:

$ link = mysql_connect ("localhost", "root", "", "tester"); if (! $ link) die ("Feil"); $ query = "LAG TABELL-brukere (pålogging VARCHAR (20), passord VARCHAR (20))"; if (mysqli_query ($ spørring)) echo "Tabellen er opprettet."; else echo "Tabell ikke opprettet:" .mysqli_error (); mysqli_close ($-lenke);

Nå vil skriptet vårt returnere linjen til nettleseren: "Tabellen er ikke opprettet: Tabell"-brukere "eksisterer allerede".

Å slippe et bord

Så, nå har vi et bord vi ikke trenger. Det er på tide å lære hvordan du sletter tabeller fra databasen.

For å slette en tabell, bruk DROP TABLE-kommandoen etterfulgt av tabellnavnet.

$ link = mysqli_connect ("localhost", "root", "", "tester"); if (! $ link) die ("Feil"); $ query = "DROPP TABLE-brukere"; if (! mysqli_query ($ query)) echo "Feil under sletting av tabell:" .mysqli_error (); else echo "Tabellen har blitt slettet."; mysqli_close ($-lenke);

Utfall

Så vi har mestret det grunnleggende i MySQL. Hva vi har lært å gjøre:

  • Koble til MySQL-databasen med funksjonen mysqli_connect ().
  • Lukk tilkoblingen til MySQL-serveren ved å bruke funksjonen mysqli_close ().
  • Send SQL-spørringer til MySQL-serveren ved å bruke funksjonen mysqli_query ().
  • Vi lærte SQL-spørringen for å lage en tabell: create table.
  • Vi lærte SQL-spørringen for å slippe en tabell: drop table.
  • Vi lærte hvordan vi håndterer feil ved å bruke funksjonene mysqli_errno () og mysqli_error ().

Deretter skal vi se nærmere på MySQL-datatyper.

Vi leser følgende leksjon: