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

Opret en tabel i SQL Server 2017

Her opretter vi tre tabeller i SQL Server, hvorefter vi analyserer scriptet, der skabte dem. Vi kører også et andet script for at bekræfte, at tabellen blev oprettet.

Tidligere lavede vi en database ud fra et script. Databasen er dog en tom database — den indeholder ingen tabeller eller data.

Nu skal vi lave nogle tabeller til vores database.

Først, som en genopfriskning, her er hvad vi har gjort indtil videre:

CREATE DATABASE Music;

Det skabte en tom database. Hvis du ikke har gjort det endnu, så kør det script.

Kør nu følgende script:

USE Music;

CREATE TABLE Artists (
  ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  ArtistName nvarchar(255) NOT NULL,
  ActiveFrom date
);
GO

CREATE TABLE Genres (
  GenreId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  Genre nvarchar(50) NOT NULL
);

CREATE TABLE Albums (
  AlbumId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  AlbumName nvarchar(255) NOT NULL,
  ReleaseDate date NOT NULL,
  ArtistId int NOT NULL,
  GenreId int NOT NULL

  CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId)     
    REFERENCES dbo.Artists (ArtistId)     
    ON DELETE NO ACTION    
    ON UPDATE NO ACTION    
);

Det script tilføjer tre tabeller til databasen. Tabellerne kaldes Artists , Genres , og Albums .

Her er resultatet i SQL Operations Studio/Azure Data Studio:

Ethvert GUI-værktøj vil vise tabellerne på stort set samme måde. Hver tabel kan udvides for at afsløre dens kolonner, såvel som eventuelle indekser, udløsere, nøgler osv. Du kan også udvide Kolonner node for at afsløre listen over kolonner og deres datatyper samt eventuelle begrænsninger, der er angivet.

Forklaring af CREATE TABLE Erklæring

Det script, vi lige har kørt, består af tre CREATE TABLE udsagn - hver enkelt opretter en anden tabel. Scriptet tilføjer også en fremmednøglebegrænsning, men det vil vi se på senere.

Indtil videre, lad os analysere den første CREATE TABLE udsagn i vores script:

USE Music;

CREATE TABLE Artists (
  ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  ArtistName nvarchar(255) NOT NULL,
  ActiveFrom date
);
GO

Denne SQL-sætning opretter en tabel kaldet Artists med tre kolonner, kaldet ArtistId , ArtistName og ActiveFrom . Hver kolonnes definition begynder med dens navn, efterfulgt af dens datatype og eventuelle begrænsninger, der skal anvendes på denne kolonne.

Her er en mere detaljeret "linje for linje" beskrivelse:

USE Music;
Denne del er faktisk ikke en del af CREATE TABLE udmelding. Det er kun der for at skifte over til Musik database. Der kan være mange databaser på serveren, og vi vil være sikre på, at vi opretter tabellerne på den rigtige database. Du behøver ikke denne linje, hvis du allerede arbejder i den korrekte database.
CREATE TABLE Artists (
Dette er starten på CREATE TABLE udmelding. Det efterfølges af tabelnavnet (i dette tilfælde Artists ), efterfulgt af den første af parenteserne, der omslutter tabeldefinitionen.
ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
Derefter definerer vi den første kolonne. I dette tilfælde kalder vi det ArtistId , angiv dens datatype som et heltal (int ), indstil den som en indentitetskolonne (denne kolonne vil give tabellens unikke ID, og ​​værdien vil stige med hver tilføjet række), (1,1) betyder, at værdien starter ved 1 og stiger med 1, NOT NULL betyder, at feltet ikke kan indeholde null-værdier og PRIMARY KEY indstiller denne kolonne som den primære nøgle til tabellen. En primær nøgle er en kolonne, der er konfigureret som det unikke identifikatorfelt for tabellen.
ArtistName nvarchar(255) NOT NULL,
Den næste kolonne hedder ArtistName og dens datatype er nvarchar(255) , hvilket betyder, at den accepterer Unicode-strengdata med variabel længde, med en maksimal længde på 255 tegn. Vi indstiller også denne kolonne til NOT NULL så den ikke kan indeholde nul-indgange.
ActiveFrom date
Den sidste kolonne hedder ActiveFrom og vi indstiller den til at acceptere en datatype date
);
Vi bruger derefter ) for at lukke definitionen, og ; for at afslutte sætningen (semikolonet er en sætningsafslutning).
GO
Signerer slutningen af ​​en batch af Transact-SQL-sætninger. Dette er faktisk ikke en Transact-SQL-erklæring. Det er en kommando, der genkendes af sqlcmd- og osql-værktøjerne og SQL Server Management Studio Code Editor for at signalere slutningen af ​​en batch af Transact-SQL-sætninger.

Sådan hentes tabeloplysninger, når du bruger et kommandolinjeværktøj

Når du bruger et kommandolinjeværktøj, har du ikke den luksus at se dine databasetabeller sidde i sidepanelet og vente på at blive udvidet med et enkelt klik. Men det betyder ikke, at du ikke kan se information om dine tabeller eller andre databaseobjekter.

Når du bruger et kommandolinjeværktøj, kan du køre følgende sætning for at vise information om tabellerne i ovenstående database:

USE Music; 
SELECT column_name, data_type, character_maximum_length, is_nullable 
FROM information_schema.columns;
Resultat
column_name  data_type  character_maximum_length  is_nullable
-----------  ---------  ------------------------  -----------
ArtistId     int        null                      NO         
ArtistName   nvarchar   255                       NO         
ActiveFrom   date       null                      YES        
GenreId      int        null                      NO         
Genre        nvarchar   50                        NO         
AlbumId      int        null                      NO         
AlbumName    nvarchar   255                       NO         
ReleaseDate  date       null                      NO         
ArtistId     int        null                      NO         
GenreId      int        null                      NO         

10 row(s) returned

Executed in 1 ms

Den pågældende tabel er i databasen kaldet Musik så det er derfor, vi skifter til det først.

Du kan også indsnævre den til en specifik tabel ved at bruge en WHERE klausul:

USE Music; 
SELECT column_name, data_type, character_maximum_length, is_nullable 
FROM information_schema.columns 
WHERE table_name = 'Artists';
Resultat
column_name  data_type  character_maximum_length  is_nullable
-----------  ---------  ------------------------  -----------
ArtistId     int        null                      NO         
ArtistName   nvarchar   255                       NO         
ActiveFrom   date       null                      YES        

3 row(s) returned

Executed in 1 ms

Der er mange flere felter, der kan returneres af information_schema.columns . Du kan bruge SELECT * for at returnere dem alle, hvis du ønsker det.

Kommandolinjemetoden til at hente tabeloplysninger fungerer også, når du bruger et GUI-værktøj (de er trods alt kun SQL-sætninger). Du kan indtaste de samme SQL-sætninger for at hente de samme data, uanset om du bruger sql-cli, sqlcmd, SSMS, Azure Data Studio, DBeaver eller ethvert andet SQL Server-administrationsværktøj:

GO Kommando

Du skal muligvis tilføje GO til slutningen af ​​scriptet (når du f.eks. bruger sqlcmd).

Flere linjer

Du kan opleve, at du får en fejl, hvis du prøver at sprede ovenstående scripts over flere linjer med et kommandolinjeværktøj.

Hvis dette er tilfældet, prøv at tilføje en omvendt skråstreg til slutningen af ​​hver linje. Sådan:

USE Music; \
SELECT column_name, data_type, character_maximum_length, is_nullable \
FROM information_schema.columns;

Hvis du ikke kan lide tanken om at skulle tilføje skråstreg, er en anden mulighed at gemme scriptet med flere linjer i en .sql-fil og derefter køre det fra kommandoprompten.

Metoden til at køre et script fra kommandoprompten afhænger af det kommandolinjeværktøj, du bruger.

Sådan bruger du sqlcmd til at køre en fil, der er gemt på en Windows-maskine:

sqlcmd -S myServer\instanceName -i C:\myScript.sql

Og her er, hvordan du bruger sql-cli til at køre en fil, der er gemt på en Mac:

.run /myScript.sql

Det er klart, at den fulde sti og filnavne afhænger af dit filnavn og hvor du har gemt det.


  1. SQL række returordre

  2. Webinar:Nye funktioner i PostgreSQL 11 [Opfølgning]

  3. Hvad er en markør i SQL, og hvordan implementerer man den?

  4. Adgang nægtet for brugeren 'root'@'localhost' med PHPMyAdmin