SQL for nybegynnere

De fleste moderne webapplikasjoner samhandler i dag med databaser, vanligvis med et språk som kalles SQL. Heldig for oss, dette språket er ganske enkelt å lære. I denne artikkelen skal vi begynne med noen grunnleggende SQL-spørringer og bruke dem til å samhandle med en MySQL-database.

Hva trenger du

SQL (Structured Query Language) er et språk utviklet for å samhandle med relasjonsdatabasebehandlingssystemer (RDBMS), som MySQL, Oracle, SQL, etc. ... For å utføre SQL-spørringene i denne artikkelen foreslår jeg at du har MySQL installert. Jeg anbefaler også phpMyAdmin som et visuelt grensesnitt til MySQL.

Følgende programmer gjør det veldig enkelt å installere både MySQL og phpMyAdmin på din lokale maskin:

  • WAMP for Windows
  • MAMP for Mac

Vi skal bruke kommandolinjen for spørringer. WAMP leveres allerede med en MySQL-konsoll. For MAMP, vil du kanskje lese denne artikkelen.

CREATE DATABASE: Opprette en database

Her kommer vår aller første spørringen. Vi skal lage en database for å jobbe med.

Først åpner du MySQL-konsollen og logger inn. For WAMP er standard passord tomt. For MAMP skal passordet være "root" som standard.

Etter å ha logget inn, skriv inn denne spørringen og trykk enter:

 CREATE DATABASE my_first_db;

Legg merke til at semikolon (;) legges til i slutten av spørringen, akkurat som ved slutten av kodelinjer.

Også de spesielle ordene "CREATE DATABASE" er sakfølsomme, sammen med alle spesielle ord i SQL. Men for lesbarhets skyld vil vi skrive dem i store bokstaver.

Valgfritt: Tegnsett og sortering

Hvis du vil angi standard tegnsett og sortering, kan du skrive det samme spørsmålet som dette i stedet:

 CREATE DATABASE my_first_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Her er en liste over støttede tegnsett og samlinger i MySQL.

VIS DATABASER: Liste alle databaser

Denne spørringen brukes til å få en liste over alle databaser du har.

DROP DATABASE: Slett en database

Du kan slette en eksisterende database med denne spørringen.

Vær forsiktig med dette spørsmålet, fordi det gir deg ingen advarsler. Hvis du har tabeller og data under databasen, vil de alle bli slettet umiddelbart.

BRUK: Velger en database

Dette er teknisk ikke et spørsmål. Det er et "uttalelse" og krever ikke et semikolon på slutten.

Det forteller MySQL å velge en standarddatabase for å jobbe med, for den nåværende økten. Nå er vi klare til å lage tabeller og gjøre andre ting under denne databasen.

Hva er en databasetabell?

Du kan tenke på en databasetabell som et regneark eller en csv-fil som inneholder strukturerte data.

På samme måte som i dette eksemplet, har tabellene kolonneavn og rader med data. Med SQL-spørringer kan vi lage disse tabellene. Vi kan også legge til, lese, oppdatere og slette dataene.

CREATE TABLE: Opprette et bord

Med denne spørringen kan vi lage tabeller i databasen. Dessverre er MySQL-dokumentasjonen ikke veldig vennlig for nye elever. Strukturen av denne typen spørring kan bli svært kompleks, men vi vil starte med en enkel en.

Følgende spørring vil opprette et bord med 2 kolonner.

 CREATE TABLE-brukere (brukernavn VARCHAR (20), create_date DATE);

Vær oppmerksom på at vi kan skrive en spørring i flere linjer, og til og med bruke faner for innrykk.

Første linje er lett. Vi lager bare et bord som heter "brukere". Etter det, i paranteser, har vi en liste tabell kolonner adskilt av kommaer. Etter hvert kolonnens navn har vi en datatype, for eksempel VARCHAR eller DATE.

VARCHAR (20) betyr at kolonnen er en strengtype, og kan være maksimalt 20 tegn lang. DATE er også en datatype som er spesifikt brukt til lagring av datoer, i dette formatet: 'ÅÅÅÅ-MM-DD'.

PRIMÆRNØKKEL

Før vi kjører spørringen, bør vi også inkludere en kolonne for "user_id", som vil være en PRIMARY KEY. Uten å komme for mye inn i detaljene, kan du tenke på en PRIMARY KEY som en måte å identifisere hver rad av data i et bord.

Nå blir spørringen:

 CREATE TABLE-brukere (user_id INT AUTO_INCREMENT PRIMARY KEY, brukernavn VARCHAR (20), create_date DATE);

INT gjør dette til en 32bit heltalltype (dvs. numerisk). AUTO_INCREMENT genererer automatisk et nytt id-nummer hver gang vi legger til nye rader med data. Det er ikke nødvendig, men gjør det mye mer praktisk.

Denne kolonnen trenger ikke å være et heltall, men det er den mest brukte typen. Å ha en PRIMARY KEY kolonne er ikke nødvendig, men det anbefales sterkt for god database design og ytelse.

La oss kjøre spørringen:

VIS TABELLER: Liste alle tabeller

Denne spørringen lar deg få en liste over tabeller som er i databasen.

FORKLAR: Vis tabellstruktur

For å se strukturen til et eksisterende bord, kan du bruke dette spørsmålet.

Felt (aka. Kolonner) er oppført i resultatene, med deres egenskaper.

DROP TABLE: Slett et bord

På samme måte som DROP DATABASES sletter dette spørsmålet et bord og dets innhold uten advarsel.

ALTER TABLE: Endre en tabell

Denne spørringen kan også ha en ganske kompleks struktur på grunn av de mange endringene den kan utføre på et bord. La oss se på noen enkle eksempler.

(Pass på at du oppretter tabellen vi nettopp har falt, eller de følgende spørsmålene vil selvsagt ikke fungere.)

Legg til en kolonne

 ALTER TABLE-brukere ADD e-post VARCHAR (100) etter brukernavn;

Takket være lesbarheten til SQL, tror jeg ikke at spørringen selv trenger en forklaring.

Fjern en kolonne

Det var også veldig enkelt. Men bruk det med forsiktighet da det permanent fjerner data uten advarsel.

Legg til e-postkolonnen fordi vi skal bruke den senere:

 ALTER TABLE-brukere ADD e-post VARCHAR (100) etter brukernavn;

Endre en kolonne

Noen ganger kan det hende du vil endre egenskapene til en kolonne, så du trenger ikke å slette og gjenskape det.

Som omdøpt brukernavnet kolonnen til "user_name" og endret typen fra VARCHAR (20) til VARCHAR (30). En endring som dette burde ikke forstyrre noen av de eksisterende dataene i tabellen.

INSERT: Legg til data i en tabell

La oss legge til noen data i tabellen ved hjelp av denne spørringen.

Som du kan se, inneholder VALUES () listen over feltverdier, skilt av kommaer. Strengverdiene er vedlagt i enkelt anførselstegn. Og verdiene må være i rekkefølge av kolonnene som ble definert da vi opprettet bordet.

Merk at den første verdien er NULL for PRIMARY KEY-feltet vi kalte 'user_id'. Vi gjør dette slik at et ID genereres automatisk, fordi kolonnen er satt til AUTO_INCREMENT. Når du går inn i en rad med data for første gang, vil id være 1. Neste innstilt rad vil være 2 og så videre ...

Alternativ syntaks

Her er en annen syntaks for å sette inn rader.

Denne gangen bruker vi nøkkelordet SET i stedet for VALUES, og det følger ikke av paratheses. Det er noen ting å merke seg her:

  • En kolonne kan utelates. For eksempel tilordnet vi ikke en verdi til user_id, som vil standard til AUTO_INCREMENT-funksjonaliteten. Hvis du slipper ut en VARCHAR-kolonne, vil den være standard til en tom streng (med mindre en annen standardverdi ble angitt under tabellopprettelsen).
  • Hver kolonne må refereres av navnet sitt. På grunn av dette kan de være i hvilken som helst rekkefølge, i motsetning til forrige syntaks.

Alternativ syntaks 2

Her er enda en syntaks.

Igjen, siden hver kolonne er referert til navn, kan de være i hvilken som helst rekkefølge.

LAST_INSERT_ID ()

Du kan bruke dette spørsmålet for å få AUTO_INCREMENT-ID for den sist innførte raden, i den nåværende økten.

NÅ()

Jeg synes det er en god tid å demonstrere hvordan du kan bruke en MySQL-funksjon i dine spørsmål.

Funksjonen NOW () returnerer gjeldende dato. Så du kan bruke den til å automatisk sette en DATE-kolonne til gjeldende dag mens du setter inn en ny rad.

Vær oppmerksom på at vi har mottatt en advarsel fra MySQL, men det er ikke en stor avtale. Årsaken er at NÅ () faktisk returnerer tidsinformasjon også.

Men create_date-kolonnen vi opprettet inneholder bare datoen, og ikke tiden, derfor ble de returnerte dataene avkortet. Vi kunne bruke funksjonen CURDATE () i stedet, som returnerer bare datoen, men dataene som lagres på slutten, ville være det samme på samme måte.

VELG: Les data fra en tabell

Tydeligvis vil dataene vi legger til være ubrukelige med mindre vi kan lese det. Det er her SELECT-spørringen kommer inn.

Her er det enkleste mulige SELECT-spørringen for å lese fra et bord:

I dette tilfellet betyr asterisken (*) at vi bedt om å hente alle kolonnene fra bordet. Hvis du bare vil ha bestemte kolonner, vil spørringen se slik ut:

HVOR Klausul

Oftere enn ikke, vi er bare interessert i noen av rader, og ikke alle. For eksempel, la oss si at vi vil ha e-postadressen til brukerens nettutvalg.

Tenk på det som en IF-setning. WHERE lar deg sette forholdene i spørringen for resultatene du leter etter.

Merk at for likestilling er det bare et enkelt likestegn brukt (=), i stedet for dobbelt (==) som du kanskje pleide å være fra programmering.

Du kan også bruke andre sammenligningsforhold:

OG og OR kan brukes til å kombinere forhold:

Vær oppmerksom på at numeriske verdier ikke må inneholde anførselstegn.

I()

Dette er nyttig for å matche flere verdier.

SOM

Dette lar deg gjøre wildcard søk.

Prosentandel (%) brukes som jokertegn.

BESTILL BY Klausul

Hvis du vil at resultatene skal returneres i en bestemt rekkefølge, bruk denne klausulen:

Standardordren er ASC (dvs. stigende). Du kan legge til DESC for å ombestille det.

LIMIT ... OFFSET ...

Du kan begrense antall returnerte resultater.

LIMIT 2 får bare de to første resultatene. LIMIT 1 OFFSET 2 får 1 resultat, etter de første 2 resultatene. LIMIT 2, 1 betyr det samme, men merk at det første tallet er offset og det andre nummeret er grensen.

OPPDATERING: Oppdater data i en tabell

Denne spørringen brukes til å oppdatere dataene i en tabell.

Mesteparten av tiden brukes den med en WHERE-setning, fordi du bare vil ha spesifikke rader som skal oppdateres. Hvis en WHERE-klausul ikke er oppgitt, vil alle rader bli oppdatert med de samme endringene.

Du kan også bruke et LIMIT-klausul for å begrense antall rader som skal oppdateres.

SLETT: Slett data fra en tabell

På samme måte som UPDATE brukes denne spørringen også vanligvis med en WHERE-bestemmelse.

TRUNCATE TABLE

For å slette hele innholdet i et bord, kan du bare gjøre dette:

 SLETT FRA brukere;

Men det er vanligvis mer ytelse effektivt å bruke TRUNCATE i stedet.

TRUNCATE tilbakestiller også AUTO_INCREMENT-tallene, slik at en ny rad igjen vil ha ID 1. Men dette skjer ikke med en DELETE-spørring, og disken fortsetter å gå opp.

Unnslippe strengverdier og spesielle ord

Strengverdier

Enkelte tegn må bli rømt, ellers kan du få problemer.

Backslash (\) brukes til å rømme.

Dette er også veldig viktig av sikkerhetshensyn. Enhver brukerinngang som går inn i databasen må være skikkelig rømt. I PHP bruker du funksjonen mysql_real_escape_string () eller bruker utarbeidede setninger siden de unnslipper automatisk.

Spesielle ord

Siden MySQL har mange spesielle ord som SELECT eller UPDATE, kan du forhindre kollisjon ved å sette sitater rundt bordet og kolonnens navn. Men disse er ikke de vanlige sitatene; du må bruke backtick (') karakteren.

La oss si at du vil legge til en kolonne som heter "slette" av en eller annen grunn:

Konklusjon

Takk for at du har lest artikkelen. Forhåpentligvis kunne jeg vise deg at SQL har en enkel læringskurve, men den er veldig kraftig.

Vennligst legg inn dine kommentarer og spørsmål, og ha en flott dag!

  • Følg oss på Twitter, eller abonner på Nettuts + RSS-feed for de beste webutviklingsopplæringene på nettet. Klar

Klar til å ta dine ferdigheter til neste nivå, og begynne å dra nytte av dine skript og komponenter? Sjekk ut vår søsters markedsplass, CodeCanyon.