Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Създайте база данни в SQL Server (T-SQL)

Много разработчици и администратори на бази данни създават бази данни с помощта на GUI инструменти като SQL Server Management Studio (SSMS), Azure Data Studio и др.

Но може да бъде много по-бързо да създавате бази данни с SQL. Това е особено вярно, ако имате различни среди, в които трябва да пресъздадете една и съща база данни. Можете да стартирате един и същ скрипт срещу всяка среда и базата данни ще бъде създадена в рамките на секунди всеки път.

В SQL Server правим това с T-SQL. T-SQL означава Transact-SQL и е разширение на SQL Server към SQL.

По-долу е даден пример за използване на T-SQL за създаване на база данни в SQL Server.

Основ код

CREATE DATABASE Music;

Това е целият код, който ви е необходим, за да създадете база данни. В този случай той създава база данни, наречена Музика .

Това обаче е всичко, което създава. Базата данни не съдържа никакви таблици или други обекти. За да направите това, трябва да използвате допълнителни оператори, за да създадете тези обекти, както е необходимо.

Също така, горният CREATE DATABASE изразът използва най-основния синтаксис, който не включва никакви аргументи. Има много опции, които могат да бъдат включени в това изявление.

Например можете да посочите собствено име за файловете и техните файлови групи. Можете също да създадете моментна снимка на база данни или да прикачите файлове на база данни, за да създадете база данни от отделените файлове на друга база данни.

Вижте документацията на Microsoft за пълния синтаксис на това изявление.

Създаване на таблици

Ето пример за създаване на три таблици за горната база данни.

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

Първата стъпка е да преминете към правилната база данни (в този случай базата данни за музика). За да направим това, използваме USE MUSIC .

След като използвате правилната база данни, можете да създадете своите таблици и други обекти. В този случай създадох три таблици. Всеки път, когато използвам CREATE TABLE , последвано от името на таблицата, която искам да създам. Това е последвано от дефиницията на тази таблица.

Определението включва колоните на таблицата и техните дефиниции. Например ArtistId е колона, използва int тип данни и съм го задал като първичен ключ за таблицата. Това, че е първичен ключ, означава, че той уникално идентифицира всеки ред в базата данни.

Също така зададох тази колона като IDENTITY колона, което означава, че всеки ред ще използва автоматично генерирана стойност, която се увеличава с всеки ред. В този случай тя ще започне от 1 и ще се увеличава с 1 (това е защото съм посочил IDENTITY(1,1) .

И накрая, аз също зададох тази колона на NOT NULL . Това означава, че трябва да съдържа стойност. Не може да бъде нула. Това всъщност е изискване, преди да зададете колоната като първичен ключ, но можете също да зададете други колони на NOT NULL според изискванията (което направих в този пример).

Създаване на връзки

В горния пример създадох връзка между Albums и Artists маси.

Връзката е вид връзка между таблици със свързани данни. Връзките помагат за налагането на целостта на данните, тъй като ви позволяват да посочите, че колона може да съдържа само стойности, които съвпадат със стойностите в конкретна колона в друга таблица.

Ето конкретната част от кода от горния пример, която създава връзката:

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

Създадох връзката в същото време, когато създадох Albums маса. Успях да го направя, защото вече бях създал Artists таблица (която е другата таблица в връзката).

Създадох връзката, като създадох ограничение за външен ключ (използвайки CONSTRAINT аргумент) и посочване на FOREIGN KEY заедно с подробностите за връзката. REFERENCES ключова дума определя коя таблица и колона са препратките към външния ключ.

Нарекох връзката FK_Albums_Artists .

ON DELETE и ON UPDATE частите са по избор. Те определят какво да се направи в случай, че някой изтрие или актуализира ред от колоната родител/първичен ключ. Стойността по подразбиране е NO ACTION , което означава, че Database Engine повдига грешка и действието за актуализиране на реда в родителската таблица се връща назад.

Статията ми за Как да създадете връзка в SQL изброява другите опции, които можете да предоставите тук, както и какво прави всяка опция.

Създаване на връзки по-късно

Можете също да създадете връзка върху съществуваща таблица.

За да направите това с T-SQL, използвайте ALTER TABLE изявление.

Така че мога да стартирам следния код, след като изпълня предишния код.

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

Това създава друга връзка, този път между Albums и Genres маси.

Можете да видите, че този код прави почти същото нещо като предишната връзка. Единствената разлика е, че връзката е между Artists и Genres вместо Albums и Artists .

В този случай нарекох връзката FK_Albums_Genres .

Вмъкване на данни

Горният код създаде база данни, която е подходяща за данни. Вече можем да добавяме данни.

В SQL Server можете да добавяте данни към база данни, като използвате INSERT изявление. Когато използвате този израз, трябва да предоставите името на таблицата, както и колоните, в които искате да вмъкнете данни.

Всъщност предоставянето на колоните е по избор, ако вмъквате данни във всички колони, но за по-голяма яснота ето пример, който включва имената на колоните.

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

Както можете да видите, всеки ред има своя собствена линия. Просто добавяме по един ред на ред, като всяка колона е разделена със запетая и заобиколена от скоби. Всеки ред също разделя със запетая (след скобите).

Изпълнението на горния код срещу нашата новосъздадена база данни води до следния изход:

(16 rows affected)

(8 rows affected)

(20 rows affected)

Това ни казва, че данните са били вмъкнати успешно.

Проверете базата данни

Можем да проведем бърз тест срещу базата данни, за да проверим дали тя е създадена и нашите данни са вмъкнати.

Например, можем да изпълним следната проста заявка.

SELECT * FROM Artists;

Резултат:

+------------+------------------------+--------------+
 | 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   |
 +------------+------------------------+--------------+ 

И нека изпълним друга заявка, която използва данни от трите таблици.

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

Резултат:

+----------------+-------------------------+---------------+
 | 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    |
 +----------------+-------------------------+---------------+ 

Тази заявка демонстрира важността на създаването на връзки между таблици със свързани данни. Когато изпълняваме заявки като тази, наистина се нуждаем данните да са съгласувани между таблиците.

Базата данни вече е готова за използване. Можем да изпълняваме заявки срещу него. Можем да вмъкнем още данни. Можем да добавим още таблици, връзки, изгледи, съхранени процедури, дефинирани от потребителя функции и много други.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LEFT() срещу SET TEXTSIZE в SQL Server:Каква е разликата?

  2. Не може да се започне разпределена транзакция

  3. Променете отместването на часовата зона на стойността на дата и отместване в SQL Server (T-SQL)

  4. Как мога да избера от списък със стойности в SQL Server

  5. SQL Server 2016:Създайте таблица