sql >> Databasteknik >  >> RDS >> Mysql

Hur man skapar en tabell i SQL – Postgres och MySQL Exempelfråga

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 OM INTE FINNS och försök skapa en tabell som redan finns i databasen, så får du ett felmeddelande.

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 :

  1. Numerisk (int, float, seriell, decimal, etc.)
  2. Data och tid (tidsstämpel, data, tid, etc)
  3. Tecken och sträng (char, varchar, text, etc)
  4. Unicode (ntext, nvarchar, etc.)
  5. Binär (binär, etc.)
  6. Ö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.



  1. ändra storleken på datatypen i sql

  2. Vanlig användare med SYSBACKUP-behörighet

  3. Det går inte att förhindra SQLiteConnection-objektläckage

  4. LOWER() – Konvertera till gemener i PostgreSQL