sql >> Databáze >  >> RDS >> Sqlserver

Vytvoření databáze na serveru SQL Server (T-SQL)

Mnoho vývojářů a správců databází vytváří databáze pomocí nástrojů GUI, jako je SQL Server Management Studio (SSMS), Azure Data Studio atd.

Ale může být mnohem rychlejší vytvářet databáze pomocí SQL. To platí zejména v případě, že máte různá prostředí, ve kterých potřebujete znovu vytvořit stejnou databázi. Pro každé prostředí můžete spustit stejný skript a databáze bude pokaždé vytvořena během několika sekund.

V SQL Server to děláme pomocí T-SQL. T-SQL je zkratka pro Transact-SQL a je to rozšíření SQL Serveru k SQL.

Níže je uveden příklad použití T-SQL k vytvoření databáze v SQL Server.

Základní kód

CREATE DATABASE Music;

Toto je veškerý kód, který potřebujete k vytvoření databáze. V tomto případě vytvoří databázi s názvem Hudba .

To je však vše, co vytváří. Databáze neobsahuje žádné tabulky ani jiné objekty. Chcete-li to provést, musíte použít další příkazy k vytvoření těchto objektů podle potřeby.

Také výše uvedený CREATE DATABASE používá nejzákladnější syntaxi, která neobsahuje žádné argumenty. Existuje mnoho možností, které lze zahrnout do tohoto prohlášení.

Můžete například zadat svůj vlastní název pro soubory a jejich skupiny souborů. Můžete také vytvořit snímek databáze nebo připojit databázové soubory a vytvořit databázi z oddělených souborů jiné databáze.

Úplnou syntaxi tohoto prohlášení naleznete v dokumentaci společnosti Microsoft.

Vytváření tabulek

Zde je příklad vytvoření tří tabulek pro výše uvedenou databázi.

USE Music;
CREATE TABLE Artists (
  ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  ArtistName nvarchar(255) NOT NULL,
  ActiveFrom date
);
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    
);

Prvním krokem je přepnutí do správné databáze (v tomto případě do databáze Music). K tomu používáme USE MUSIC .

Jakmile používáte správnou databázi, můžete vytvářet tabulky a další objekty. V tomto případě jsem vytvořil tři tabulky. Pokaždé, když použiji CREATE TABLE , následovaný názvem tabulky, kterou chci vytvořit. Poté následuje definice tabulky.

Definice obsahuje sloupce tabulky a jejich definice. Například ArtistId je sloupec, používá int datový typ a nastavil jsem jej jako primární klíč pro tabulku. Být primárním klíčem znamená, že jedinečně identifikuje každý řádek v databázi.

Tento sloupec jsem také nastavil jako IDENTITY sloupec, což znamená, že každý řádek použije automaticky vygenerovanou hodnotu, která se zvyšuje s každým řádkem. V tomto případě bude začínat na 1 a bude se zvyšovat o 1 (to proto, že jsem zadal IDENTITY(1,1) .

Nakonec jsem tento sloupec také nastavil na NOT NULL . To znamená, že musí obsahovat hodnotu. Nemůže být nulový. Toto je ve skutečnosti požadavek před nastavením sloupce jako primárního klíče, ale můžete také nastavit ostatní sloupce na NOT NULL podle potřeby (což jsem provedl v tomto příkladu).

Vytvářejte vztahy

Ve výše uvedeném příkladu jsem vytvořil vztah mezi Albums a Artists tabulky.

Vztah je druh propojení mezi tabulkami se souvisejícími daty. Vztahy pomáhají prosazovat integritu dat, protože umožňují určit, že sloupec může obsahovat pouze hodnoty, které odpovídají hodnotám v konkrétním sloupci v jiné tabulce.

Zde je konkrétní část kódu z výše uvedeného příkladu, která vytváří vztah:

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

Vztah jsem vytvořil ve stejnou dobu, kdy jsem vytvořil Albums stůl. Byl jsem schopen to udělat, protože jsem již vytvořil Artists tabulka (což je druhá tabulka ve vztahu).

Vztah jsem vytvořil vytvořením omezení cizího klíče (pomocí CONSTRAINT argument) a zadáním FOREIGN KEY spolu s detaily vztahu. REFERENCES klíčové slovo určuje, na kterou tabulku a sloupec cizí klíč odkazuje.

Vztah jsem pojmenoval FK_Albums_Artists .

ON DELETE a ON UPDATE díly jsou volitelné. Určují, co dělat v případě, že někdo odstraní nebo aktualizuje řádek ze sloupce nadřazeného/primárního klíče. Výchozí hodnota je NO ACTION , což znamená, že Database Engine vyvolá chybu a akce aktualizace na řádku v nadřazené tabulce je vrácena zpět.

Můj článek o tom, jak vytvořit vztah v SQL, uvádí další možnosti, které zde můžete poskytnout, a také to, co každá možnost dělá.

Vytvořte vztahy později

Můžete také vytvořit vztah na existující tabulce.

Chcete-li to provést pomocí T-SQL, použijte ALTER TABLE prohlášení.

Takže po spuštění předchozího kódu mohu spustit následující kód.

ALTER TABLE Albums
ADD CONSTRAINT FK_Albums_Genres FOREIGN KEY (GenreId)     
	REFERENCES dbo.Genres (GenreId)     
	ON DELETE NO ACTION    
	ON UPDATE NO ACTION
;

Tím se vytvoří další vztah, tentokrát mezi Albums a Genres tabulky.

Můžete vidět, že tento kód dělá v podstatě totéž, co předchozí vztah. Jediný rozdíl je v tom, že vztah je mezi Artists a Genres místo Albums a Artists .

V tomto případě jsem vztah nazval FK_Albums_Genres .

Vložit data

Výše uvedený kód vytvořil databázi, která je vhodná pro data. Nyní můžeme přidat data.

V SQL Server můžete přidat data do databáze pomocí INSERT prohlášení. Při použití tohoto příkazu musíte zadat název tabulky a také sloupce, do kterých chcete vložit data.

Poskytnutí sloupců je ve skutečnosti volitelné, pokud vkládáte data do všech sloupců, ale v zájmu srozumitelnosti uvádíme příklad, který obsahuje názvy sloupců.

INSERT INTO Artists (ArtistName, ActiveFrom)
VALUES 
  ('Iron Maiden','1975-12-25'),
  ('AC/DC','1973-01-11'), 
  ('Allan Holdsworth','1969-01-01'),
  ('Buddy Rich','1919-01-01'),
  ('Devin Townsend','1993-01-01'),
  ('Jim Reeves','1948-01-01'),
  ('Tom Jones','1963-01-01'),
  ('Maroon 5','1994-01-01'),
  ('The Script','2001-01-01'),
  ('Lit','1988-06-26'),
  ('Black Sabbath','1968-01-01'),
  ('Michael Learns to Rock','1988-03-15'),
  ('Carabao','1981-01-01'),
  ('Karnivool','1997-01-01'),
  ('Birds of Tokyo','2004-01-01'),
  ('Bodyjar','1990-01-01');
INSERT INTO Genres (Genre)
VALUES 
  ('Rock'),
  ('Jazz'), 
  ('Country'),
  ('Pop'),
  ('Blues'),
  ('Hip Hop'),
  ('Rap'),
  ('Punk');
INSERT INTO Albums (AlbumName, ReleaseDate, ArtistId, GenreId)
VALUES 
  ('Powerslave', '1984-09-03', 1, 1),
  ('Powerage', '1978-05-05', 2, 1), 
  ('Singing Down the Lane', '1956-01-01', 6, 3),
  ('Ziltoid the Omniscient', '2007-05-21', 5, 1),
  ('Casualties of Cool', '2014-05-14', 5, 1),
  ('Epicloud', '2012-09-18', 5, 1),
  ('Somewhere in Time', '1986-09-29', 1, 1),	
  ('Piece of Mind', '1983-05-16', 1, 1),	
  ('Killers', '1981-02-02', 1, 1),	
  ('No Prayer for the Dying', '1990-10-01', 1, 1),	
  ('No Sound Without Silence', '2014-09-12', 9, 4),	
  ('Big Swing Face', '1967-06-01', 4, 2),	
  ('Blue Night', '2000-11-01', 12, 4),	
  ('Eternity', '2008-10-27', 12, 4),	
  ('Scandinavia', '2012-06-11', 12, 4),	
  ('Long Lost Suitcase', '2015-10-09', 7, 4),	
  ('Praise and Blame', '2010-06-26', 7, 4),	
  ('Along Came Jones', '1965-05-21', 7, 4),	
  ('All Night Wrong', '2002-05-05', 3, 2),	
  ('The Sixteen Men of Tain', '2000-03-20', 3, 2);

Jak vidíte, každý řádek má svůj vlastní řádek. Jednoduše přidáme jeden řádek na řádek s každým sloupcem odděleným čárkou a ohraničeným závorkami. Čárkou se také odděluje každý řádek (za závorkou).

Spuštění výše uvedeného kódu proti naší nově vytvořené databázi má za následek následující výstup:

(16 rows affected)

(8 rows affected)

(20 rows affected)

To nám říká, že data byla úspěšně vložena.

Zkontrolujte databázi

Můžeme provést rychlý test proti databázi, abychom ověřili, že byla vytvořena a naše data byla vložena.

Můžeme například spustit následující jednoduchý dotaz.

SELECT * FROM Artists;

Výsledek:

+------------+------------------------+--------------+
 | ArtistId   | ArtistName             | ActiveFrom   |
 |------------+------------------------+--------------|
 | 1          | Iron Maiden            | 1975-12-25   |
 | 2          | AC/DC                  | 1973-01-11   |
 | 3          | Allan Holdsworth       | 1969-01-01   |
 | 4          | Buddy Rich             | 1919-01-01   |
 | 5          | Devin Townsend         | 1993-01-01   |
 | 6          | Jim Reeves             | 1948-01-01   |
 | 7          | Tom Jones              | 1963-01-01   |
 | 8          | Maroon 5               | 1994-01-01   |
 | 9          | The Script             | 2001-01-01   |
 | 10         | Lit                    | 1988-06-26   |
 | 11         | Black Sabbath          | 1968-01-01   |
 | 12         | Michael Learns to Rock | 1988-03-15   |
 | 13         | Carabao                | 1981-01-01   |
 | 14         | Karnivool              | 1997-01-01   |
 | 15         | Birds of Tokyo         | 2004-01-01   |
 | 16         | Bodyjar                | 1990-01-01   |
 +------------+------------------------+--------------+ 

A spusťte další dotaz, který používá data ze všech tří tabulek.

SELECT 
  ArtistName,
  AlbumName,
  ReleaseDate
FROM Artists ar
INNER JOIN Albums al
ON ar.ArtistId = al.ArtistId
INNER JOIN Genres g 
ON al.GenreId = g.GenreId
WHERE g.Genre = 'Rock';

Výsledek:

+----------------+-------------------------+---------------+
 | ArtistName     | AlbumName               | ReleaseDate   |
 |----------------+-------------------------+---------------|
 | Iron Maiden    | Powerslave              | 1984-09-03    |
 | AC/DC          | Powerage                | 1978-05-05    |
 | Devin Townsend | Ziltoid the Omniscient  | 2007-05-21    |
 | Devin Townsend | Casualties of Cool      | 2014-05-14    |
 | Devin Townsend | Epicloud                | 2012-09-18    |
 | Iron Maiden    | Somewhere in Time       | 1986-09-29    |
 | Iron Maiden    | Piece of Mind           | 1983-05-16    |
 | Iron Maiden    | Killers                 | 1981-02-02    |
 | Iron Maiden    | No Prayer for the Dying | 1990-10-01    |
 +----------------+-------------------------+---------------+ 

Tento dotaz ukazuje důležitost vytváření vztahů mezi tabulkami se souvisejícími daty. Když spouštíme dotazy, jako je tento, opravdu potřebujeme, aby byla data mezi tabulkami konzistentní.

Databáze je nyní připravena k použití. Můžeme proti tomu spouštět dotazy. Můžeme vložit více dat. Můžeme přidat další tabulky, vztahy, pohledy, uložené procedury, uživatelsky definované funkce a mnoho dalšího.


  1. Neznámý Sloupec V Ustanovení Kde

  2. Jak funguje funkce TRANSLATE() v SQL Server (T-SQL)

  3. Jak vložit velké množství dat do databáze sqlite v systému Android

  4. Výhody a nevýhody používání uložených procedur