sql >> Databasteknik >  >> RDS >> Database

SQL SKAPA TABELL för nybörjare

Den här artikeln innehåller grundläggande SQL CREATE TABLE uttalanden som nybörjare kan använda för att skapa grundläggande tabeller för sina databasprojekt.

Grundläggande syntax

Den grundläggande syntaxen för att skapa tabeller i SQL ser ut så här:

CREATE TABLE TableName (
    Column1 datatype optional_constraints,
    Column2 datatype optional_constraints,
    Column3 datatype optional_constraints,
    ...
);

Var:

  • TableName är namnet du vill ge bordet
  • Column1 , etc är namnen du ger dina kolumner
  • datatype är den datatyp som du tilldelar varje kolumn. De flesta RDBMS kräver att du tilldelar en datatyp till varje kolumn. I SQLite är det valfritt.
  • optional_constraints är en valfri lista över begränsningar som du tillämpar mot en kolumn.

Observera att de flesta DBMS:er använder en mer komplex syntax än denna (dvs de erbjuder fler alternativ), men detta är i allmänhet den grundläggande syntaxen som krävs för att skapa en tabell. De flesta nybörjare börjar med den här syntaxen och lär sig sedan mer avancerade alternativ allt eftersom de utvecklas.

Grundläggande exempel

Här är ett grundläggande exempel:

CREATE TABLE Pets
(
    PetId       int NOT NULL PRIMARY KEY,
    PetTypeId   int NOT NULL,
    OwnerId     int NOT NULL,
    PetName     varchar(60) NOT NULL,
    DOB         date NULL
);

Här är några punkter att notera:

  • Tabell- och kolumnnamn kan vara i alla fall. Till exempel istället för PetId Jag kunde ha kallat det petid , PETID , eller pet_id . Vissa DBMS:er (t.ex. Postgres) är skiftlägeskänsliga när du frågar efter tabeller och deras kolumnnamn, medan andra inte är det (t.ex. SQL Server).
  • Vissa DBMS använder olika namn för sina datatyper.
  • NOT NULL är en tabellrestriktion som anger att denna kolumn måste innehålla ett värde (dvs. den kan inte innehålla NULL värden).
  • NULL betyder att kolumnen tillåts innehålla NULL värden. Vissa DBMS:er (som DB2) stöder inte NULL nyckelord, och därför måste du utelämna det när du arbetar med sådana DBMS.
  • PRIMARY KEY lägger till en primärnyckelrestriktion i tabellen. Det är bra att ange en primärnyckel på alla dina tabeller.
  • Om en tabell med samma namn redan finns i databasen får du ett felmeddelande. Du måste släppa den befintliga tabellen eller ändra den (eller ändra namnet på den du skapar).

Skapa en tabell med främmande nycklar

Följande exempel skapar en tabell med två främmande nycklar. Främmande nycklar används för att skapa en relation mellan två tabeller.

CREATE TABLE Pets
(
    PetId       int NOT NULL PRIMARY KEY,
    PetTypeId   int NOT NULL REFERENCES PetTypes (PetTypeId),
    OwnerId     int NOT NULL REFERENCES Owners (OwnerId),
    PetName     varchar(60) NOT NULL,
    DOB         date NULL
);

REFERENCES sats används för att definiera en främmande nyckel mot två kolumner. I vårt fall tvingar de främmande nycklarna följande:

  • Pets.PetTypeId kolumnen refererar till PetTypes.PetTypeId kolumnen (vilket värde som helst som går in i Pets.PetTypeId kolumnen måste ha ett matchande värde i PetTypes.PetTypeId kolumn).
  • Pets.OwnerId kolumnen refererar till Owners.OwnerId kolumnen (vilket värde som helst som går in i Pets.OwnerId kolumnen måste ha ett matchande värde i Owners.OwnerId kolumn).

Främmande nycklar kan också läggas till senare med ALTER TABLE uttalande om det behövs.

Skapa en tabell med DEFAULT Constraint

Följande exempel skapar en tabell med en DEFAULT begränsning.

CREATE TABLE OrderItems
(
    OrderId     int NOT NULL PRIMARY KEY,
    OrderItem   int NOT NULL,
    ProductId   int NOT NULL,
    Quantity    int NOT NULL DEFAULT 1,
    ItemPrice   decimal(8,2) NOT NULL 
);

Skapa en tabell med en tidsstämpelkolumn

Du kan använda DEFAULT begränsningar för att automatiskt infoga aktuellt datum och tid i en kolumn när en ny rad infogas. Detta kallas ofta för att infoga en tidsstämpel.

Olika DBMS använder olika funktioner för att returnera det aktuella datumet.

Här är ett exempel på hur du gör det i SQL Server.

CREATE TABLE Users
(
    UserId         int NOT NULL PRIMARY KEY,
    FirstName      varchar(60) NOT NULL,
    LastName       varchar(60) NOT NULL,
    DateInserted   datetime DEFAULT CURRENT_TIMESTAMP
);

I SQL Server, CURRENT_TIMESTAMP är ANSI-motsvarigheten till GETDATE() funktion.

Du kan alternativt använda SYSDATETIME() för en högre precision tidsstämpel:

CREATE TABLE Users
(
    UserId         int NOT NULL PRIMARY KEY,
    FirstName      varchar(60) NOT NULL,
    LastName       varchar(60) NOT NULL,
    DateInserted   datetime2 DEFAULT SYSDATETIME()
);

För att stödja den högre precisionen måste kolumnens datatyp vara datetime2 .

SQL Server har en hel del datatyper för datum/tidsvärden. Se SQL Servers datum- och tidsfunktioner för en lista.

Varje DBMS har sina egna funktioner för att returnera datum och tid. Här är en lista över de viktigaste:

DB2 CURRENT_DATE
MySQL CURRENT_DATE eller NOW()
Oracle SYSDATE
PostgreSQL CURRENT_DATE
SQL-server CURRENT_TIMESTAMP , GETDATE() eller SYSDATETIME()
SQLite datetime('now')

Se även:

  • SQL-serverns datum- och tidsfunktioner
  • SQLite datum och tid funktioner

Skapa en kolumn med ett automatiskt ökande värde

Ibland behöver du skapa en kolumn som automatiskt ökar ett värde när en ny rad infogas. Dessa kallas vanligtvis kolumner för "automatisk ökning" eller "identitet", beroende på vilket DBMS som används.

I SQL Server, använd IDENTITY argument:

CREATE TABLE Users
(
    UserId         int NOT NULL IDENTITY(1,1) PRIMARY KEY,
    FirstName      varchar(60) NOT NULL,
    LastName       varchar(60) NOT NULL,
    DateInserted   datetime2 DEFAULT SYSDATETIME()
);

I det här fallet använder vi IDENTITY(1,1) .

  • Den första 1 är fröet. Detta anger vilket värde som ska starta räkningen (dvs detta är värdet på den allra första raden som infogas i tabellen).
  • Den andra 1 är ökningen. Detta är det inkrementella värdet som läggs till identitetsvärdet för den föregående raden som laddades.

Varje DBMS har sitt eget nyckelord för att skapa en kolumn för automatisk ökning.

  • Använd AUTO_INCREMENT i MySQL och MariaDb
  • I SQLite har du ett par alternativ (inklusive AUTOINCREMENT sökord)
  • I PostgreSQL, använd SERIAL
  • Från Oracle Database 12c , kan du nu använda nyckelordet IDENTITY för att skapa automatiskt ökande kolumner. Ett exempel kan se ut så här:UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY

Avancerade alternativ

De flesta DBMS låter dig ange avancerade alternativ när du skapar tabeller. Vilka alternativ som är tillgängliga beror till stor del på ditt DBMS.

Se din DBMS-dokumentation om du behöver alternativ som inte anges i den här artikeln.

Många avancerade alternativ kan ställas in via GUI (beroende på vilket verktyg du använder för att ansluta till din databas). Du kan alltid skapa eller ändra en tabell via det grafiska användargränssnittet och sedan använda dess "Skript som Skapa" (eller liknande) alternativ för att se SQL-koden som du behöver köra för att skapa en sådan tabell. Du kan ta den här koden och ändra tabellnamn, kolumnnamn etc för att skapa en helt ny tabell baserat på definitionen av den tidigare.


  1. Lägg till dagar till ett datum i SQLite

  2. Barman Cloud – Del 2:Cloud Backup

  3. Returnera den sökta informationen från sqlite

  4. MySQL-strängbyte