sql >> Database teknologi >  >> RDS >> Database

SQL CREATE TABLE for begyndere

Denne artikel indeholder grundlæggende SQL CREATE TABLE sætninger, som begyndere kan bruge til at oprette grundlæggende tabeller til deres databaseprojekter.

Grundlæggende syntaks

Den grundlæggende syntaks til at oprette tabeller i SQL ser sådan ud:

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

Hvor:

  • TableName er det navn, du vil give bordet
  • Column1 osv. er de navne, du giver dine kolonner
  • datatype er den datatype, du tildeler hver kolonne. De fleste RDBMS'er kræver, at du tildeler en datatype til hver kolonne. I SQLite er det valgfrit.
  • optional_constraints er en valgfri liste over begrænsninger, som du anvender mod en kolonne.

Bemærk, at de fleste DBMS'er bruger en mere kompleks syntaks end dette (dvs. de tilbyder flere muligheder), men dette er generelt den grundlæggende syntaks, der kræves for at oprette en tabel. De fleste begyndere starter med denne syntaks og lærer derefter mere avancerede muligheder, efterhånden som de udvikler sig.

Grundlæggende eksempel

Her er et grundlæggende eksempel:

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
);

Her er nogle punkter at bemærke:

  • Tabel- og kolonnenavne kan være i alle tilfælde. For eksempel i stedet for PetId Jeg kunne have kaldt det petid , PETID eller pet_id . Nogle DBMS'er (f.eks. Postgres) skelner mellem store og små bogstaver, når du forespørger i tabeller og deres kolonnenavne, mens andre ikke er det (f.eks. SQL Server).
  • Nogle DBMS'er bruger forskellige navne til deres datatyper.
  • NOT NULL er en tabelbegrænsning, der specificerer, at denne kolonne skal indeholde en værdi (dvs. den kan ikke indeholde NULL værdier).
  • NULL betyder, at kolonnen må indeholde NULL værdier. Nogle DBMS'er (såsom DB2) understøtter ikke NULL nøgleord, og du bliver derfor nødt til at udelade det, når du arbejder med sådanne DBMS'er.
  • PRIMARY KEY tilføjer en primær nøglebegrænsning til tabellen. Det er god praksis at angive en primær nøgle på alle dine tabeller.
  • Hvis en tabel med samme navn allerede findes i databasen, får du en fejl. Du bliver nødt til at slette den eksisterende tabel eller ændre den (eller ændre navnet på den, du opretter).

Opret en tabel med fremmednøgler

Følgende eksempel opretter en tabel med to fremmednøgler. Fremmednøgler bruges til at skabe en relation mellem to 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 klausul bruges til at definere en fremmednøgle mod to kolonner. I vores tilfælde håndhæver de fremmede nøgler følgende:

  • Pets.PetTypeId kolonnen refererer til PetTypes.PetTypeId kolonne (enhver værdi, der går ind i Pets.PetTypeId kolonnen skal have en matchende værdi i PetTypes.PetTypeId kolonne).
  • Pets.OwnerId kolonnen refererer til Owners.OwnerId kolonne (enhver værdi, der går ind i Pets.OwnerId kolonnen skal have en matchende værdi i Owners.OwnerId kolonne).

Fremmednøgler kan også tilføjes senere ved at bruge ALTER TABLE erklæring om nødvendigt.

Opret en tabel med DEFAULT Constraint

Følgende eksempel opretter en tabel 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 
);

Opret en tabel med en tidsstempelkolonne

Du kan bruge DEFAULT begrænsninger for automatisk at indsætte den aktuelle dato og klokkeslæt i en kolonne, hver gang en ny række indsættes. Dette omtales ofte som at indsætte et tidsstempel.

Forskellige DBMS'er bruger forskellige funktioner til at returnere den aktuelle dato.

Her er et eksempel på at gøre 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 er ANSI-ækvivalenten til GETDATE() funktion.

Du kan alternativt bruge SYSDATETIME() for et tidsstempel med højere præcision:

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

For at understøtte den højere præcision skal kolonnens datatype være datetime2 .

SQL Server har en del datatyper for dato/tidsværdier. Se SQL Server dato og klokkeslæt funktioner for en liste.

Hvert DBMS har sine egne funktioner til at returnere dato og klokkeslæt. Her er en liste over de vigtigste:

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

Se også:

  • SQL Server Dato- og Tidsfunktioner
  • SQLite dato- og tidsfunktioner

Opret en kolonne med en automatisk stigende værdi

Nogle gange skal du oprette en kolonne, der automatisk øger en værdi, hver gang en ny række indsættes. Disse omtales typisk som "auto-increment"- eller "identity"-kolonner, afhængigt af det DBMS, der bruges.

I SQL Server skal du bruge 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 dette tilfælde bruger vi IDENTITY(1,1) .

  • Den første 1 er frøet. Dette angiver, hvilken værdi der skal starte optællingen (dvs. dette er værdien af ​​den allerførste række, der er indsat i tabellen).
  • Den anden 1 er stigningen. Dette er den trinvise værdi, der tilføjes til identitetsværdien for den forrige indlæste række.

Hvert DBMS har sit eget nøgleord til oprettelse af en auto-inkrementerende kolonne.

  • I MySQL og MariaDb skal du bruge AUTO_INCREMENT
  • I SQLite har du et par muligheder (inklusive AUTOINCREMENT søgeord)
  • I PostgreSQL skal du bruge SERIAL
  • Fra Oracle Database 12c , kan du nu bruge nøgleordet IDENTITY til at oprette kolonner med automatisk stigning. Et eksempel kan se ud som:UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY

Avancerede indstillinger

De fleste DBMS'er giver dig mulighed for at angive avancerede muligheder, når du opretter tabeller. De tilgængelige muligheder afhænger i høj grad af dit DBMS.

Se din DBMS-dokumentation, hvis du har brug for muligheder, der ikke er specificeret i denne artikel.

Mange avancerede muligheder kan indstilles via GUI (afhængigt af det værktøj, du bruger til at oprette forbindelse til din database). Du kan altid oprette eller ændre en tabel via GUI'en og derefter bruge dens "Script som Opret" (eller lignende) mulighed for at se den SQL-kode, du skal køre for at oprette en sådan tabel. Du kan tage denne kode og ændre tabelnavne, kolonnenavne osv. for at oprette en helt ny tabel baseret på definitionen af ​​den forrige.


  1. Eksporter SQL-forespørgselsdata til Excel

  2. Hvordan RANK() virker i SQL Server

  3. Hvad er forskellen mellem postgres og postgresql_psycopg2 som en databasemotor til django?

  4. Flere opdateringer i MySQL