sql >> Database >  >> RDS >> Database

SQL MAAK TABEL voor beginners

Dit artikel bevat basis SQL CREATE TABLE instructies die beginners kunnen gebruiken om basistabellen voor hun databaseprojecten te maken.

Basissyntaxis

De basissyntaxis voor het maken van tabellen in SQL gaat als volgt:

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

Waar:

  • TableName is de naam die u aan de tafel wilt geven
  • Column1 , etc zijn de namen die u aan uw kolommen geeft
  • datatype is het gegevenstype dat u aan elke kolom toewijst. De meeste RDBMS'en vereisen dat u aan elke kolom een ​​gegevenstype toewijst. In SQLite is het optioneel.
  • optional_constraints is een optionele lijst met beperkingen die u op een kolom toepast.

Merk op dat de meeste DBMS'en een complexere syntaxis gebruiken dan deze (d.w.z. ze bieden meer opties), maar dit is over het algemeen de basissyntaxis die nodig is om een ​​tabel te maken. De meeste beginners beginnen met deze syntaxis en leren daarna meer geavanceerde opties naarmate ze vorderen.

Basisvoorbeeld

Hier is een eenvoudig voorbeeld:

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

Hier zijn enkele aandachtspunten:

  • Tabel- en kolomnamen kunnen in ieder geval zijn. Bijvoorbeeld in plaats van PetId Ik had het petid kunnen noemen , PETID , of pet_id . Sommige DBMS'en (bijv. Postgres) zijn hoofdlettergevoelig wanneer u tabellen en hun kolomnamen opvraagt, terwijl andere dat niet zijn (bijv. SQL Server).
  • Sommige DBMS'en gebruiken verschillende namen voor hun gegevenstypes.
  • NOT NULL is een tabelbeperking die aangeeft dat deze kolom een ​​waarde moet bevatten (d.w.z. deze mag geen NULL bevatten waarden).
  • NULL betekent dat de kolom NULL . mag bevatten waarden. Sommige DBMS'en (zoals DB2) ondersteunen de NULL . niet trefwoord, en u zult het dus moeten weglaten wanneer u met dergelijke DBMS'en werkt.
  • PRIMARY KEY voegt een primaire sleutelbeperking toe aan de tabel. Het is een goede gewoonte om een ​​primaire sleutel op al uw tabellen op te geven.
  • Als er al een tabel met dezelfde naam in de database bestaat, krijg je een foutmelding. U moet de bestaande tabel verwijderen of wijzigen (of de naam wijzigen van degene die u aan het maken bent).

Maak een tabel met externe sleutels

In het volgende voorbeeld wordt een tabel gemaakt met twee externe sleutels. Buitenlandse sleutels worden gebruikt om een ​​relatie tussen twee tabellen te maken.

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

De REFERENCES clausule wordt gebruikt om een ​​externe sleutel voor twee kolommen te definiëren. In ons geval dwingen de externe sleutels het volgende af:

  • De Pets.PetTypeId kolom verwijst naar de PetTypes.PetTypeId kolom (elke waarde die in de Pets.PetTypeId kolom moet een overeenkomende waarde hebben in de PetTypes.PetTypeId kolom).
  • De Pets.OwnerId kolom verwijst naar de Owners.OwnerId kolom (elke waarde die in de Pets.OwnerId kolom moet een overeenkomende waarde hebben in de Owners.OwnerId kolom).

Vreemde sleutels kunnen ook later worden toegevoegd, met behulp van de ALTER TABLE verklaring indien nodig.

Een tabel maken met DEFAULT-beperking

In het volgende voorbeeld wordt een tabel gemaakt met een DEFAULT beperking.

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

Maak een tabel met een tijdstempelkolom

U kunt DEFAULT . gebruiken beperkingen om automatisch de huidige datum en tijd in een kolom in te voegen wanneer een nieuwe rij wordt ingevoegd. Dit wordt vaak het invoegen van een tijdstempel genoemd.

Verschillende DBMS'en gebruiken verschillende functies om de huidige datum te retourneren.

Hier is een voorbeeld om het in SQL Server te doen.

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

In SQL Server, CURRENT_TIMESTAMP is het ANSI-equivalent van de GETDATE() functie.

U kunt ook SYSDATETIME() . gebruiken voor een nauwkeurigere tijdstempel:

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

Om de hogere precisie te ondersteunen, moet het gegevenstype van de kolom datetime2 . zijn .

SQL Server heeft nogal wat datatypes voor datum/tijd-waarden. Zie SQL Server datum- en tijdfuncties voor een lijst.

Elk DBMS heeft zijn eigen functies voor het retourneren van de datum en tijd. Hier is een lijst van de belangrijkste:

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

Zie ook:

  • SQL Server datum- en tijdfuncties
  • SQLite datum- en tijdfuncties

Maak een kolom met een automatisch oplopende waarde

Soms moet u een kolom maken die automatisch een waarde verhoogt wanneer een nieuwe rij wordt ingevoegd. Deze worden meestal “auto-increment” of “identity” kolommen genoemd, afhankelijk van het DBMS dat wordt gebruikt.

Gebruik in SQL Server de 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()
);

In dit geval gebruiken we IDENTITY(1,1) .

  • De eerste 1 is het zaad. Dit specificeert met welke waarde de telling moet beginnen (d.w.z. dit is de waarde van de allereerste rij die in de tabel is ingevoegd).
  • De tweede 1 is de verhoging. Dit is de incrementele waarde die wordt toegevoegd aan de identiteitswaarde van de vorige geladen rij.

Elk DBMS heeft zijn eigen sleutelwoord voor het maken van een automatisch oplopende kolom.

  • Gebruik in MySQL en MariaDb AUTO_INCREMENT
  • In SQLite heb je een aantal opties (inclusief de AUTOINCREMENT zoekwoord)
  • Gebruik in PostgreSQL SERIAL
  • Van Oracle Database 12c , kunt u nu het IDENTITY-sleutelwoord gebruiken voor het maken van automatisch oplopende kolommen. Een voorbeeld kan er als volgt uitzien:UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY

Geavanceerde opties

Bij de meeste DBMS'en kunt u geavanceerde opties opgeven bij het maken van tabellen. De beschikbare opties zijn grotendeels afhankelijk van uw DBMS.

Raadpleeg uw DBMS-documentatie als u opties nodig heeft die niet in dit artikel worden gespecificeerd.

Veel geavanceerde opties kunnen worden ingesteld via de GUI (afhankelijk van de tool die u gebruikt om verbinding te maken met uw database). U kunt altijd een tabel maken of wijzigen via de GUI en vervolgens de optie "Script as Create" (of iets dergelijks) gebruiken om de SQL-code te zien die u moet uitvoeren om zo'n tabel te maken. U kunt deze code gebruiken en de tabelnamen, kolomnamen, enz. wijzigen om een ​​geheel nieuwe tabel te maken op basis van de definitie van de vorige.


  1. Rechtstreeks toegang krijgen tot een SQL Server-database in Xamarin.Forms

  2. Wijzig het wachtwoord op de SA Login in SQL Server (T-SQL-voorbeeld)

  3. Wat is de fout Elke afgeleide tabel moet zijn eigen alias hebben in MySQL?

  4. Hetzelfde schema gebruiken voor meerdere SQL Server Agent-taken (T-SQL)