SQL för nybörjare

De flesta moderna webbapplikationer hanterar idag databaser, vanligtvis med ett språk som heter SQL. Lyckligt för oss, det här språket är ganska lätt att lära. I den här artikeln kommer vi att börja med några grundläggande SQL-frågor och använda dem för att interagera med en MySQL-databas.

Vad du behöver

SQL (Structured Query Language) är ett språk som är utformat för att interagera med relationsdatabashanteringssystem (RDBMS), som MySQL, Oracle, Sqlite etc ... För att utföra SQL-frågorna i den här artikeln föreslår jag att du har MySQL installerad. Jag rekommenderar också phpMyAdmin som ett visuellt gränssnitt till MySQL.

Följande applikationer gör det mycket enkelt att installera både MySQL och phpMyAdmin på din lokala dator:

  • WAMP för Windows
  • MAMP för Mac

Vi kommer att använda kommandoraden för frågor. WAMP levereras redan med en MySQL-konsol. För MAMP kan du läsa den här artikeln.

CREATE DATABASE: Skapa en databas

Här kommer vår allra första fråga. Vi ska skapa en databas för att arbeta med.

Öppna först din MySQL-konsol och logga in. För WAMP är standardlösenordet tomt. För MAMP ska lösenordet vara "root" som standard.

Efter inloggning skriver du in den här frågan och slår på:

 CREATE DATABASE my_first_db;

Observera att semikolon (;) läggs till i slutet av frågan, precis som i slutet av kodens rader.

Dessutom är de speciella orden "CREATE DATABASE" fall okänsliga, tillsammans med alla speciella ord i SQL. Men för läsbarhetens skull kommer vi att skriva dem i stor bokstav.

Valfritt: Teckenuppsättning och sortering

Om du vill ställa in standard teckenuppsättning och sortering kan du skriva samma fråga i stället här:

 SKAPA DATABASE my_first_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Här är en lista över stödda teckenuppsättningar och sorteringar i MySQL.

VISA DATABASER: Lista alla databaser

Denna fråga används för att få en lista över alla databaser du har.

DROP DATABASE: Ta bort en databas

Du kan ta bort en befintlig databas med den här frågan.

Var försiktig med den här frågan, eftersom den inte ger dig några varningar. Om du har tabeller och data under databasen, kommer de alla att raderas direkt.

ANVÄNDNING: Välja en databas

Detta är tekniskt ingen fråga. Det är ett "uttalande" och kräver inte en semikolon i slutet.

Det berättar för MySQL att välja en standarddatabas att arbeta med, för den aktuella sessionen. Nu är vi redo att skapa tabeller och göra andra saker under den här databasen.

Vad är en databas tabell?

Du kan tänka på en databas tabell som ett kalkylblad eller csv-fil som innehåller strukturerad data.

Precis som i det här exemplet har tabeller kolumnnamn och rader med data. Med SQL-frågor kan vi skapa dessa tabeller. Vi kan också lägga till, läsa, uppdatera och ta bort data.

SKAPA TABELL: Skapa ett bord

Med denna fråga kan vi skapa tabeller i databasen. Tyvärr är MySQL-dokumentationen inte särskilt vänlig för nya elever. Strukturen för denna typ av fråga kan bli väldigt komplex, men vi börjar med en enkel.

Följande fråga kommer att skapa ett bord med 2 kolumner.

 Skapa TABLE-användare (användarnamn VARCHAR (20), create_date DATE);

Observera att vi kan skriva en fråga i flera rader och till och med använda flikar för indryckning.

Första raden är lätt. Vi skapar bara ett bord som heter "användare". Därefter har vi i paranteser en lista tabell kolumner åtskilda av kommatecken. Efter varje kolumnnamn har vi en datatyp, till exempel VARCHAR eller DATE.

VARCHAR (20) betyder att kolumnen är en strängtyp och kan vara högst 20 tecken långt. DATE är också en datatyp som används specifikt för att lagra datum, i detta format: 'ÅÅÅÅ-MM-DD'.

PRIMÄRNYCKEL

Innan vi kör den frågan bör vi också inkludera en kolumn för "user_id", som kommer att vara en PRIMÄR KEY. Utan att få för mycket in i detaljerna kan du tänka på en PRIMARY KEY som ett sätt att identifiera varje rad data i ett bord.

Nu blir frågan:

 CREATE TABLE-användare (user_id INT AUTO_INCREMENT PRIMARY KEY, användarnamn VARCHAR (20), create_date DATE);

INT gör detta till en 32bit heltalstyp (dvs numerisk). AUTO_INCREMENT genererar automatiskt ett nytt id-nummer varje gång vi lägger till nya rader med data. Det är inte nödvändigt, men gör det mycket bekvämare.

Denna kolumn behöver inte vara ett heltal, men det är den vanligaste typen. Det är inte nödvändigt med en PRIMARY KEY-kolumn, men det rekommenderas starkt för bra databasdesign och prestanda.

Låt oss köra frågan:

VISA TABELLER: Lista alla tabeller

Denna fråga låter dig få en lista med tabeller som för närvarande finns i databasen.

FÖRKLARING: Visa tabellstruktur

För att se strukturen för ett befintligt bord kan du använda den här frågan.

Fält (aka kolumner) är listade i resultaten med sina egenskaper.

DROP TABLE: Ta bort ett bord

Precis som DROP DATABASER, raderar denna fråga en tabell och dess innehåll utan varning.

ALTER TABLE: Ändra ett bord

Denna fråga kan också ha en ganska komplex struktur på grund av de många förändringar som den kan utföra på ett bord. Låt oss titta på några enkla exempel.

(Se till att du skapar tabellen vi bara har tappat eller de följande frågorna uppenbarligen inte fungerar.)

Lägg till en kolumn

 ALTER TABLE-användare ADD-e-post VARCHAR (100) efter användarnamn;

Tack vare läsbarheten hos SQL tror jag inte att frågan även behöver en förklaring.

Ta bort en kolumn

Det var också väldigt enkelt. Men använd det med försiktighet eftersom det permanent tar bort data utan varning.

Lägg till e-postkolumnen eftersom vi ska använda den senare:

 ALTER TABLE-användare ADD-e-post VARCHAR (100) efter användarnamn;

Ändra en kolumn

Ibland kanske du vill ändra egenskaperna för en kolumn så att du inte behöver ta bort och skapa det igen.

Det bytte namnkolumnen till "användarnamn" och ändrade typen från VARCHAR (20) till VARCHAR (30). En ändring som denna bör inte störa någon av de befintliga uppgifterna i tabellen.

INSERT: Lägg till data i ett bord

Låt oss lägga till några data i tabellen med den här frågan.

Som du kan se innehåller VALUES () listan med fältvärden, separerade med kommatecken. Strängvärdena är bifogade i enkla citat. Och värdena måste vara i storleksordningen av de kolumner som definierades när vi skapade tabellen.

Observera att det första värdet är NULL för PRIMARY KEY-fältet som vi kallade "user_id". Vi gör det så att ett ID genereras automatiskt, eftersom kolumnen är inställd på AUTO_INCREMENT. När du anger en rad data för första gången kommer id att vara 1. Nästa infogade rad blir 2 och så vidare ...

Alternativ syntax

Här är en annan syntax för att infoga rader.

Den här gången använder vi nyckelordet SET istället för VALUES, och det följs inte av paratheses. Det finns några saker att notera här:

  • En kolumn kan utelämnas. Till exempel tilldelade vi inte ett värde till user_id, vilket kommer att vara standard för AUTO_INCREMENT-funktionaliteten. Om du släpper bort en VARCHAR-kolumn skulle den vara standard till en tom sträng (om inte ett annat standardvärde specificerades under tabellen skapades).
  • Varje kolumn måste refereras av sitt namn. På grund av detta kan de vara i vilken ordning som helst, till skillnad från tidigare syntax.

Alternativ syntax 2

Här är ytterligare en syntax.

Återigen, eftersom varje kolumn är refererad av namn, kan de vara i vilken ordning som helst.

LAST_INSERT_ID ()

Du kan använda den här frågan för att få AUTO_INCREMENT-id för den sista inmatade raden, i den aktuella sessionen.

NU()

Jag tycker att det är en bra tid att visa hur du kan använda en MySQL-funktion inom dina frågor.

NU () -funktionen returnerar det aktuella datumet. Så du kan använda den för att automatiskt ställa in en DATE-kolumn till den aktuella dagen medan du lägger in en ny rad.

Observera att vi fick en varning från MySQL, men det är inte en stor sak. Anledningen är att NU () faktiskt returnerar tidsinformation också.

Men den create_date-kolumnen som vi skapade innehåller bara datumet, och inte tiden, därför blev de returnerade dataen avkortade. Vi kan använda funktionen CURDATE () istället, vilket returnerar bara datumet, men de data som lagras i slutet skulle vara desamma samma sätt.

VÄLJ: Läs data från ett bord

Självklart är de data vi lagt till vara värdelösa om vi inte kan läsa den. Det är här SELECT-frågan kommer in.

Här är den enklaste möjliga SELECT-frågan för att läsa från ett bord:

I detta fall betyder asterisken (*) att vi bad att hämta alla kolumnerna från bordet. Om du bara vill ha specifika kolumner ser sökningen ut så här:

Var Clause

Ofta är vi inte bara intresserade av några av raderna, och inte alla. Till exempel, låt oss säga att vi vill ha e-postadressen för användarens nät ".

Tänk på det som ett IF-uttalande. Var kan du ställa villkor i frågan för resultaten du letar efter.

Observera att för likestillståndet används endast ett enda lika tecken (=), i stället för dubbelt (==) som du kanske brukar använda från programmering.

Du kan också använda andra jämförelsevillkor:

OCH och OR kan användas för att kombinera förhållandena:

Observera att numeriska värden inte behöver innehålla citat.

I()

Detta är användbart för att matcha flera värden.

TYCKA OM

Detta gör att du kan göra jokertecken.

Procentandelstecken (%) används som jokertecken.

BESTÄLL AV ARTIKEL

Om du vill att resultaten ska returneras i en viss ordning, använd denna klausul:

Standardordern är ASC (dvs stigande). Du kan lägga till DESC för att vända om det.

LIMIT ... OFFSET ...

Du kan begränsa antalet returnerade resultat.

LIMIT 2 får bara de första 2 resultaten. LIMIT 1 OFFSET 2 får 1 resultat, efter de 2 första resultaten. LIMIT 2, 1 betyder samma sak, men notera att det första numret är offset och det andra numret är gränsen.

UPDATE: Uppdatera data i en tabell

Denna fråga används för att uppdatera data i en tabell.

För det mesta används den med en WHERE-klausul, eftersom du bara vill att specifika rader ska uppdateras. Om en WHERE-klausul inte anges, uppdateras alla rader med samma ändringar.

Du kan också använda en LIMIT-klausul för att begränsa antalet rader som ska uppdateras.

DELETE: Ta bort data från ett bord

Precis som UPDATE används denna fråga vanligtvis också med en WHERE-klausul.

TRUNCATE TABLE

För att radera hela innehållet i en tabell kan du bara göra det här:

 DELETE FROM users;

Men det är vanligtvis mer prestanda effektivt att använda TRUNCATE istället.

TRUNCATE återställer också AUTO_INCREMENT-numren så att en ny rad igen kommer att ha id 1. Men det här händer inte med en DELETE-fråga och räknaren fortsätter att gå upp.

Escaping strängvärden och speciella ord

Strängvärden

Vissa tecken måste undvikas, annars kan du få problem.

Backslash (\) används för att fly.

Detta är också mycket viktigt av säkerhetsskäl. Alla användarinmatningar som går in i databasen behöver rensas ordentligt. I PHP använder du funktionen mysql_real_escape_string () eller använder förberedda uttalanden eftersom de automatiskt flyr ut.

Särskilda ord

Eftersom MySQL har många speciella ord som SELECT eller UPDATE, kan du förhindra kollision genom att sätta citat runt ditt bord och kolumnnamn. Men det här är inte de vanliga citat; du måste använda bakåtslaget (') tecken.

Låt oss säga att du vill lägga till en kolumn som heter "ta bort" av någon anledning:

Slutsats

Tack för att du läste artikeln. Förhoppningsvis kunde jag visa dig att SQL har en enkel inlärningskurva men den är väldigt kraftfull.

Vänligen lämna dina kommentarer och frågor, och ha en bra dag!

  • Följ oss på Twitter, eller prenumerera på Nettuts + RSS-flödet för de bästa webbutvecklingsstudierna på webben. Redo

Klar för att ta dina färdigheter till nästa nivå och börja dra nytta av dina skript och komponenter? Kolla in vår systermarknad, CodeCanyon.