Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tạo cơ sở dữ liệu trong SQL Server (T-SQL)

Nhiều nhà phát triển và quản trị viên cơ sở dữ liệu tạo cơ sở dữ liệu bằng các công cụ GUI như SQL Server Management Studio (SSMS), Azure Data Studio, v.v.

Nhưng có thể nhanh hơn nhiều để tạo cơ sở dữ liệu bằng SQL. Điều này đặc biệt đúng nếu bạn có nhiều môi trường khác nhau mà bạn cần tạo lại cùng một cơ sở dữ liệu. Bạn có thể chạy cùng một tập lệnh đối với từng môi trường và cơ sở dữ liệu sẽ được tạo trong vòng vài giây mỗi lần.

Trong SQL Server, chúng tôi thực hiện điều này với T-SQL. T-SQL là viết tắt của Transact-SQL và nó là phần mở rộng của SQL Server cho SQL.

Dưới đây là ví dụ về việc sử dụng T-SQL để tạo cơ sở dữ liệu trong SQL Server.

Mã cơ bản

CREATE DATABASE Music;

Đây là tất cả mã bạn cần để tạo cơ sở dữ liệu. Trong trường hợp này, nó tạo một cơ sở dữ liệu có tên là Âm nhạc .

Tuy nhiên, đó là tất cả những gì nó tạo ra. Cơ sở dữ liệu không chứa bất kỳ bảng hoặc đối tượng nào khác. Để làm điều đó, bạn phải sử dụng các câu lệnh khác để tạo các đối tượng đó theo yêu cầu.

Ngoài ra, CREATE DATABASE ở trên câu lệnh sử dụng cú pháp cơ bản nhất không bao gồm bất kỳ đối số nào. Có nhiều tùy chọn có thể được bao gồm với câu lệnh này.

Ví dụ:bạn có thể chỉ định tên riêng của mình cho các tệp và nhóm tệp của chúng. Bạn cũng có thể tạo ảnh chụp nhanh cơ sở dữ liệu hoặc đính kèm tệp cơ sở dữ liệu để tạo cơ sở dữ liệu từ các tệp tách rời của cơ sở dữ liệu khác.

Xem tài liệu Microsoft để biết cú pháp đầy đủ cho câu lệnh này.

Tạo bảng

Dưới đây là một ví dụ về cách tạo ba bảng cho cơ sở dữ liệu trên.

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

Bước đầu tiên là chuyển sang cơ sở dữ liệu chính xác (trong trường hợp này là cơ sở dữ liệu Âm nhạc). Để thực hiện việc này, chúng tôi sử dụng USE MUSIC .

Sau khi sử dụng đúng cơ sở dữ liệu, bạn có thể tạo bảng và các đối tượng khác. Trong trường hợp này, tôi đã tạo ba bảng. Mỗi lần tôi sử dụng CREATE TABLE , theo sau là tên bảng mà tôi muốn tạo. Tiếp theo là định nghĩa của bảng đó.

Định nghĩa bao gồm các cột của bảng và định nghĩa của chúng. Ví dụ:ArtistId là một cột, nó sử dụng int loại dữ liệu và tôi đã đặt nó làm khóa chính cho bảng. Là khóa chính có nghĩa là nó xác định duy nhất mỗi hàng trong cơ sở dữ liệu.

Tôi cũng đã đặt cột này thành IDENTITY , có nghĩa là mỗi hàng sẽ sử dụng một giá trị được tạo tự động tăng dần theo mỗi hàng. Trong trường hợp này, nó sẽ bắt đầu từ 1 và tăng lên 1 (đó là vì tôi đã chỉ định IDENTITY(1,1) .

Cuối cùng, tôi cũng đã đặt cột này thành NOT NULL . Điều này có nghĩa là nó phải chứa một giá trị. Nó không thể là null. Đây thực sự là một yêu cầu trước khi bạn đặt cột làm khóa chính, nhưng bạn cũng có thể đặt các cột khác thành NOT NULL theo yêu cầu (mà tôi đã thực hiện trong ví dụ này).

Tạo mối quan hệ

Trong ví dụ trên, tôi đã tạo mối quan hệ giữa AlbumsArtists những cái bàn.

Mối quan hệ là một loại liên kết giữa các bảng với dữ liệu liên quan. Các mối quan hệ giúp thực thi tính toàn vẹn của dữ liệu, vì chúng cho phép bạn chỉ định rằng một cột chỉ có thể chứa các giá trị khớp với các giá trị trong một cột cụ thể trong một bảng khác.

Đây là phần mã cụ thể từ ví dụ trên tạo ra mối quan hệ:

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

Tôi tạo mối quan hệ đồng thời tạo Albums bàn. Tôi có thể làm điều đó vì tôi đã tạo Artists bảng (là bảng khác trong mối quan hệ).

Tôi đã tạo mối quan hệ bằng cách tạo ràng buộc khóa ngoại (sử dụng CONSTRAINT đối số) và chỉ định FOREIGN KEY cùng với các chi tiết của mối quan hệ. REFERENCES từ khóa chỉ định bảng và cột nào tham chiếu khóa ngoại.

Tôi đã đặt tên cho mối quan hệ là FK_Albums_Artists .

ON DELETEON UPDATE các bộ phận là tùy chọn. Chúng chỉ định những gì cần làm trong trường hợp ai đó xóa hoặc cập nhật một hàng từ cột khóa chính / mẹ. Giá trị mặc định là NO ACTION , có nghĩa là Công cụ cơ sở dữ liệu phát sinh lỗi và hành động cập nhật trên hàng trong bảng mẹ được khôi phục lại.

Bài viết của tôi về Cách tạo mối quan hệ trong SQL liệt kê các tùy chọn khác mà bạn có thể cung cấp ở đây, cũng như chức năng của mỗi tùy chọn.

Tạo mối quan hệ sau

Bạn cũng có thể tạo mối quan hệ trên bảng hiện có.

Để thực hiện việc này bằng T-SQL, hãy sử dụng ALTER TABLE tuyên bố.

Vì vậy, tôi có thể chạy mã sau sau khi chạy mã trước.

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

Điều này tạo ra một mối quan hệ khác, lần này là giữa AlbumsGenres những cái bàn.

Bạn có thể thấy rằng mã này thực hiện khá nhiều điều tương tự như mối quan hệ trước đó. Sự khác biệt duy nhất là mối quan hệ giữa ArtistsGenres thay vì AlbumsArtists .

Trong trường hợp này, tôi đặt tên cho mối quan hệ là FK_Albums_Genres .

Chèn dữ liệu

Đoạn mã trên đã tạo một cơ sở dữ liệu phù hợp với dữ liệu. Bây giờ chúng tôi có thể thêm dữ liệu.

Trong SQL Server, bạn có thể thêm dữ liệu vào cơ sở dữ liệu bằng cách sử dụng INSERT tuyên bố. Khi sử dụng câu lệnh này, bạn cần cung cấp tên của bảng cũng như các cột bạn muốn chèn dữ liệu vào.

Trên thực tế, việc cung cấp các cột là tùy chọn nếu bạn đang chèn dữ liệu vào tất cả các cột, nhưng để rõ ràng, đây là một ví dụ bao gồm tên cột.

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

Như bạn thấy, mỗi hàng có một dòng riêng. Chúng tôi chỉ cần thêm một dòng trên mỗi hàng với mỗi cột được phân tách bằng dấu phẩy và được bao quanh bởi dấu ngoặc đơn. Dấu phẩy cũng phân tách từng hàng (sau dấu ngoặc đơn).

Chạy đoạn mã trên với cơ sở dữ liệu mới được tạo của chúng tôi sẽ dẫn đến kết quả sau:

(16 rows affected)

(8 rows affected)

(20 rows affected)

Điều này cho chúng tôi biết rằng dữ liệu đã được chèn thành công.

Kiểm tra cơ sở dữ liệu

Chúng tôi có thể chạy kiểm tra nhanh đối với cơ sở dữ liệu để xác minh rằng nó đã được tạo và dữ liệu của chúng tôi đã được chèn vào.

Ví dụ:chúng ta có thể chạy truy vấn đơn giản sau.

SELECT * FROM Artists;

Kết quả:

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

Và hãy chạy một truy vấn khác sử dụng dữ liệu từ cả ba bảng.

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

Kết quả:

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

Truy vấn này thể hiện tầm quan trọng của việc tạo mối quan hệ giữa các bảng với dữ liệu liên quan. Khi chúng tôi chạy các truy vấn như thế này, chúng tôi thực sự cần dữ liệu phải nhất quán giữa các bảng.

Cơ sở dữ liệu hiện đã sẵn sàng để sử dụng. Chúng tôi có thể chạy các truy vấn chống lại nó. Chúng tôi có thể chèn thêm dữ liệu. Chúng ta có thể thêm nhiều bảng, mối quan hệ, dạng xem, thủ tục được lưu trữ, hàm do người dùng xác định và hơn thế nữa.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo khóa chính tổng hợp trong SQL Server (Ví dụ T-SQL)

  2. SQL Server 2016:Sao lưu cơ sở dữ liệu

  3. Mệnh đề WHERE có điều kiện trong SQL Server

  4. Truy vấn SQL để chia dữ liệu cột thành các hàng

  5. Liệt kê các tài khoản được liên kết với cấu hình thư cơ sở dữ liệu trong SQL Server