Att veta hur man skapar tabeller i SQL
är ett viktigt och grundläggande begrepp.
I den här handledningen kommer jag att leda dig genom SQL
syntax för CREATE TABLE
uttalande med kodexempel för både PostgreSQL och MySQL.
Grundläggande SKAPA TABELL
Syntax
Här är den grundläggande syntaxen för CREATE TABLE
uttalande:
CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
);
För den första delen måste du börja med CREATE TABLE
uttalande följt av namnet på tabellen du vill skapa.
Om jag ville skapa en tabell med lärarinformation skulle jag skriva något så här:
CREATE TABLE teachers();
Inom parentesen lägger du till informationen för att skapa kolumnerna för tabellen. Om du glömmer parentesen får du ett felmeddelande.
CREATE TABLE teachers;
Semikolonet i slutet av parentesen talar om för datorn att det är slutet av SQL
påstående. Du kommer ibland att höra att detta kallas för en uttalandeterminator.
Vad är MySQL
lagringsmotorer?
Enligt MySQL
dokumentation:
Lagringsmotorer är MySQL-komponenter som hanterar SQL-operationer för olika tabelltyper.
MySQL
använder dessa lagringsmotorer för att utföra CRUD-operationer (skapa, läsa, uppdatera och ta bort) på databasen.
I MySQL
, har du möjlighet att ange vilken typ av lagringsmotor du vill använda för ditt bord. Om du utelämnar ENGINE
klausul då är standardinställningen InnoDB.
CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
)ENGINE=storage_engine;
Vad är OM INTE FINNS
klausul?
Det finns en valfri klausul som heter OM INTE FINNS
som kontrollerar om tabellen du vill skapa redan finns i databasen. Du kan placera den satsen precis före tabellnamnet.
CREATE TABLE IF NOT EXISTS teachers();
Om tabellen redan finns kommer datorn inte att skapa en ny tabell.
Om du utelämnar
I det här exemplet skapade jag först en tabell som heter lärare. Men om jag försöker skapa samma tabell i nästa kommando kommer jag att stöta på ett fel.
CREATE TABLE IF NOT EXISTS teachers();
CREATE TABLE teachers();
Så skapar du kolumner i tabellen
Inuti parentesen för CREATE TABLE
uttalande kommer du att lista namnen på de kolumner du vill skapa tillsammans med deras datatyper och begränsningar.
Det här är ett exempel på hur vi kan lägga till fyra kolumner med school_id
, namn
, e-post
och ålder
till vårt lärarbord. Varje kolumnnamn ska separeras med kommatecken.
CREATE TABLE teachers(
school_id data_type column_constraint,
name data_type column_constraint,
email data_type column_constraint,
age data_type column_constraint
);
Enligt MySQL
dokumentation:
MySQL har en hård gräns på 4096 kolumner per tabell, men det effektiva maximumet kan vara mindre för en given tabell. Den exakta kolumngränsen beror på flera faktorer.
Om du arbetar med mindre MySQL
personliga projekt, då behöver du förmodligen inte oroa dig för att överskrida antalet kolumner för dina tabeller.
Enligt PostgreSQL-dokumentationen finns det en gräns på 1600 kolumner per tabell. Liknar MySQL
, kan en exakt gräns variera beroende på diskutrymme eller prestandabegränsningar.
Datatyper i SQL
När du skapar kolumner i tabellen måste du tilldela den en datatyp. Datatyper beskriver typen av värde i kolumnerna.
Här är sex populära kategorier av datatyper i SQL
:
- Numerisk (int, float, seriell, decimal, etc.)
- Data och tid (tidsstämpel, data, tid, etc)
- Tecken och sträng (char, varchar, text, etc)
- Unicode (ntext, nvarchar, etc.)
- Binär (binär, etc.)
- Övrigt (xml, tabell, etc.)
Den här artikeln kommer inte att gå igenom varje enskild datatyp men kommer att täcka några av de populära.
Här är den fullständiga listan över PostgreSQL
datatyper och MySQL
datatyper.
Vad är SERIAL
och AUTO_INCREMENT
?
I PostgreSQL
, en SERIAL
datatyp är ett heltal som automatiskt ökar med ett för varje ny rad som skapas.
Vi kan lägga till SERIAL
direkt efter school_id
kolumnen i vår lärartabell.
school_id SERIAL
I MySQL
, skulle du använda AUTO_INCREMENT
istället för SERIAL
. I det här exemplet är INT
datatyp används som representerar ett heltal.
school_id INT AUTO_INCREMENT
Om vi lade till fem rader till vår lärartabell skulle utdata visa siffrorna 1, 2, 3, 4, 5 för school_id
kolumn eftersom heltal automatiskt ökar med ett för varje ny rad.
Vad är VARCHAR
data typ?
En VARCHAR
datatyp är en variabel stränglängd där du kan ställa in en maximal teckenlängd.
Detta är ett exempel på hur du använder VARCHAR
datatyp för name
och e-post
kolumner i vår lärartabell. Siffran 30 är den maximala teckenlängden.
name VARCHAR(30) column_constraint,
email VARCHAR(30) column_constraint,
Kolumnbegränsningar i SQL
Detta är regler som tillämpas på data i tabellkolumnerna.
Här är en lista över några av de vanligaste kolumnbegränsningarna:
- PRIMÄRNYCKEL – denna nyckel fungerar som en unik identifierare för tabellen
- FREIGN KEY - denna nyckel ser till att värdena i en kolumn också finns i en annan tabell. Detta fungerar som en länk mellan tabeller.
- UNIKT – alla värden i kolumnen måste vara unika
- INTE NULL - värdena kan inte vara NULL. NULL är frånvaron av ett värde
- CHECK - testar ett värde mot ett booleskt uttryck
Exempel på PRIMÄR
och FREIGN
nycklar
I vår lärartabell kan vi lägga till en PRIMÄRNYCKEL
till school_id
kolumn.
Så här skulle koden se ut i PostgreSQL:
school_id SERIAL PRIMARY KEY
Så här skulle koden se ut i MySQL:
school_id INT AUTO_INCREMENT PRIMARY KEY
Om du vill ha mer än en kolumn för PRIMÄRNYCKEL
, då skulle du lägga till det direkt efter dina kolumner.
CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
PRIMARY KEY (column1, column2)
);
Om du vill länka en tabell till en annan kan du använda en FREIGN KEY
.
Låt oss säga att vi hade en tabell som heter distriktsanställda med primärnyckeln district_id
. Så här skulle koden se ut i PostgreSQL:
CREATE TABLE district_employees(
district_id SERIAL PRIMARY KEY,
employee_name VARCHAR(30) NOT NULL,
PRIMARY KEY(district_id)
);
I vår lärartabell kan vi använda en främmande nyckel och referera till tabellen district_employees.
district_id INT REFERENCES district_employees(district_id),
CREATE TABLE teachers(
school_id SERIAL PRIMARY KEY,
district_id INT REFERENCES district_employees(district_id),
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
);
Exempel på NOT NULL
, KONTROLL
och UNIQUE
Om vi vill säkerställa att vi inte har några värden som är null, kan vi använda NOT NULL
begränsning.
name VARCHAR(30) NOT NULL
Vi kan använda CHECK
begränsning för att säkerställa att alla våra lärare är 18 år och äldre. CHECK
constraint testar ett värde mot ett booleskt uttryck.
age INT CHECK(age >= 18)
Om ett av våra värden inte uppfyller det villkoret får vi ett felmeddelande.
Vi kan använda UNIQUE
begränsning för att se till att alla e-postmeddelanden är unika.
email VARCHAR(30) UNIQUE
Detta är slutresultatet för lärartabellen:
Så här skulle koden se ut i PostgreSQL:
CREATE TABLE teachers(
school_id SERIAL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(30) UNIQUE,
age INT CHECK(age >= 18)
);
Så här skulle koden se ut i MySQL:
CREATE TABLE teachers(
school_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(30) UNIQUE,
age INT CHECK(age >= 18)
);
Jag hoppas att du gillade den här artikeln och lycka till på din SQL-resa.