Trong hướng dẫn này, bạn sẽ học cách tạo, chỉnh sửa và xóa lược đồ [lược đồ] trong cơ sở dữ liệu SQL Server
Lược đồ trong SQL Server là gì
Lược đồ [schema] là tập hợp các đối tượng cơ sở dữ liệu bao gồm bảng, khung nhìn, trình kích hoạt, thủ tục lưu trữ, chỉ mục, v. v. Lược đồ được liên kết với tên người dùng được gọi là chủ sở hữu lược đồ, chủ sở hữu của các đối tượng cơ sở dữ liệu liên quan về mặt logic
Một lược đồ luôn thuộc về một cơ sở dữ liệu. Mặt khác, một cơ sở dữ liệu có thể có một hoặc nhiều lược đồ. Ví dụ, trong
CREATE SCHEMA customer_services;
GO
8, chúng tôi có hai lược đồ. CREATE SCHEMA customer_services;
GO
9 và SELECT
s.name AS schema_name,
u.name AS schema_owner
FROM
sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY
s.name;
0Một đối tượng đủ điều kiện trong Lược đồ bằng cách sử dụng định dạng định dạng
SELECT
s.name AS schema_name,
u.name AS schema_owner
FROM
sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY
s.name;
1, ví dụ. SELECT
s.name AS schema_name,
u.name AS schema_owner
FROM
sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY
s.name;
2. Hai bảng trong hai lược đồ có thể sử dụng tên chung nếu bạn có thể có SELECT
s.name AS schema_name,
u.name AS schema_owner
FROM
sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY
s.name;
3 và SELECT
s.name AS schema_name,
u.name AS schema_owner
FROM
sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY
s.name;
4Lược đồ tích hợp trong SQL Server
SQL Server cung cấp cho chúng tôi một số lược đồ được định nghĩa trước đó, ví dụ.
SELECT
s.name AS schema_name,
u.name AS schema_owner
FROM
sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY
s.name;
5, SELECT
s.name AS schema_name,
u.name AS schema_owner
FROM
sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY
s.name;
6, SELECT
s.name AS schema_name,
u.name AS schema_owner
FROM
sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY
s.name;
7, và SELECT
s.name AS schema_name,
u.name AS schema_owner
FROM
sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY
s.name;
8Lưu ý rằng SQL Server sử dụng các lược đồ7 vàSELECT s.name AS schema_name, u.name AS schema_owner FROM sys.schemas s INNER JOIN sys.sysusers u ON u.uid = s.principal_id ORDER BY s.name;
8 cho các hệ thống đối tượng, do đó, bạn không thể tạo hoặc xóa bất kỳ đối tượng nào trong lược đồ nàySELECT s.name AS schema_name, u.name AS schema_owner FROM sys.schemas s INNER JOIN sys.sysusers u ON u.uid = s.principal_id ORDER BY s.name;
Lược đồ mặc định cho cơ sở dữ liệu mới được tạo ra là
SELECT
s.name AS schema_name,
u.name AS schema_owner
FROM
sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY
s.name;
5, thuộc quyền sở hữu của tài khoản người dùng SELECT
s.name AS schema_name,
u.name AS schema_owner
FROM
sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY
s.name;
5. Theo mặc định, khi bạn tạo người dùng mới bằng lệnh CREATE TABLE customer_services.jobs[
job_id INT PRIMARY KEY IDENTITY,
customer_id INT NOT NULL,
description VARCHAR[200],
created_at DATETIME2 NOT NULL
];
3, người dùng sẽ lấy SELECT
s.name AS schema_name,
u.name AS schema_owner
FROM
sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY
s.name;
5 làm lược đồ mặc định của nóTạo lược đồ bằng câu lệnh CREATE SCHEMA trong SQL Server
Tổng quan về câu lệnh CREATE SCHEMA trong SQL Server
Lệnh
CREATE TABLE customer_services.jobs[
job_id INT PRIMARY KEY IDENTITY,
customer_id INT NOT NULL,
description VARCHAR[200],
created_at DATETIME2 NOT NULL
];
5 cho phép bạn tạo một lược đồ mới trong cơ sở dữ liệu hiện tạiPhần sau minh họa phiên bản đơn giản hóa của câu lệnh
CREATE TABLE customer_services.jobs[
job_id INT PRIMARY KEY IDENTITY,
customer_id INT NOT NULL,
description VARCHAR[200],
created_at DATETIME2 NOT NULL
];
5CREATE SCHEMA schema_name
[AUTHORIZATION owner_name]
Trong cú pháp này,
- Đầu tiên, chỉ tên của lược đồ mà bạn muốn tạo trong mệnh đề
5CREATE TABLE customer_services.jobs[ job_id INT PRIMARY KEY IDENTITY, customer_id INT NOT NULL, description VARCHAR[200], created_at DATETIME2 NOT NULL ];
- Tiếp theo, chỉ định chủ sở hữu của lược đồ sau từ khóa
8CREATE TABLE customer_services.jobs[ job_id INT PRIMARY KEY IDENTITY, customer_id INT NOT NULL, description VARCHAR[200], created_at DATETIME2 NOT NULL ];
Ví dụ về câu lệnh CREATE SCHEMA trong SQL Server
Ví dụ sau để thấy cách sử dụng câu lệnh
CREATE TABLE customer_services.jobs[
job_id INT PRIMARY KEY IDENTITY,
customer_id INT NOT NULL,
description VARCHAR[200],
created_at DATETIME2 NOT NULL
];
5 để lập lược đồ ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;
0CREATE SCHEMA customer_services;
GO
Lưu ý rằng lệnh1 hướng dẫn SQL Server Management Studio gửi câu lệnh SQL ở phía trên lệnhALTER SCHEMA target_schema_name TRANSFER [ entity_type :: ] securable_name;
1 tới máy chủ để thực thiALTER SCHEMA target_schema_name TRANSFER [ entity_type :: ] securable_name;
Sau khi thực hiện câu lệnh, bạn có thể tìm thấy lược đồ mới được tạo trong Bảo mật > Lược đồ như hình dưới đây
Nếu bạn muốn liệt kê tất cả các lược đồ trong cơ sở dữ liệu hiện tại, bạn có thể truy vấn các lược đồ từ
ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;
3 như được minh họa trong truy vấn sauSELECT
s.name AS schema_name,
u.name AS schema_owner
FROM
sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY
s.name;
This is results
Sau khi có lược đồ
ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;
0, bạn có thể tạo các đối tượng cho lược đồ. Ví dụ. câu lệnh sau khi tạo một bảng mới có tên ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;
5 trong lược đồ ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;
0CREATE TABLE customer_services.jobs[
job_id INT PRIMARY KEY IDENTITY,
customer_id INT NOT NULL,
description VARCHAR[200],
created_at DATETIME2 NOT NULL
];
Chỉnh sửa lược đồ bằng câu lệnh ALTER SCHEMA trong SQL Server
Tổng quan về câu lệnh ALTER SCHEMA trong SQL Server
Lệnh
ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;
7 cho phép bạn chuyển các bảo mật từ một lược đồ sang một lược đồ khác trong cùng một cơ sở dữ liệuLưu ý rằng. an toàn là tài nguyên mà hệ thống ủy quyền của Database Engine kiểm tra giám sát quyền truy cập. Ví dụ, một bảng là an toàn
Sau đây là cú pháp của câu lệnh
ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;
7ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;
In this cú pháp
9 là tên của một lược đồ trong cơ sở dữ liệu hiện tại mà bạn muốn chuyển các đối tượng vào đó. Lưu ý rằng nó không thể làALTER SCHEMA target_schema_name TRANSFER [ entity_type :: ] securable_name;
0 hoặcCREATE TABLE dbo.offices [ office_id INT PRIMARY KEY IDENTITY, office_name NVARCHAR[40] NOT NULL, office_address NVARCHAR[255] NOT NULL, phone VARCHAR[20], ];
8SELECT s.name AS schema_name, u.name AS schema_owner FROM sys.schemas s INNER JOIN sys.sysusers u ON u.uid = s.principal_id ORDER BY s.name;
2 could be Object, Type or Tập hợp lược đồ XML. It default is Object.CREATE TABLE dbo.offices [ office_id INT PRIMARY KEY IDENTITY, office_name NVARCHAR[40] NOT NULL, office_address NVARCHAR[255] NOT NULL, phone VARCHAR[20], ];
2 đại diện cho lớp của thực thể mà chủ sở hữu đang được thay đổiCREATE TABLE dbo.offices [ office_id INT PRIMARY KEY IDENTITY, office_name NVARCHAR[40] NOT NULL, office_address NVARCHAR[255] NOT NULL, phone VARCHAR[20], ];
4 là tên của bảo mật mà bạn muốn chuyển vàoCREATE TABLE dbo.offices [ office_id INT PRIMARY KEY IDENTITY, office_name NVARCHAR[40] NOT NULL, office_address NVARCHAR[255] NOT NULL, phone VARCHAR[20], ];
9ALTER SCHEMA target_schema_name TRANSFER [ entity_type :: ] securable_name;
Nếu bạn chuyển một thủ tục, chức năng, dạng xem hoặc trình kích hoạt được lưu trữ, SQL Server sẽ không thay đổi tên lược đồ của các bảo mật này. Do đó, bạn nên xóa và tạo lại các đối tượng này trong Lược đồ mới thay vì sử dụng câu lệnh
ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;
7 để di chuyểnIf you di chuyển một đối tượng, ví dụ. bảng hoặc từ đồng nghĩa, SQL Server sẽ không tự động cập nhật các tham chiếu cho các đối tượng này. Bạn phải sửa đổi công cụ tham chiếu để phản ánh tên lược đồ mới. Ví dụ. Nếu bạn chuyển một bảng được tham chiếu trong một thủ tục được lưu trữ, bạn phải sửa đổi thủ tục được lưu trữ để phản ánh tên lược đồ mới
Ví dụ về câu lệnh ALTER SCHEMA trong SQL Server
Đầu tiên, hãy tạo một bảng mới có tên
CREATE TABLE dbo.offices
[
office_id INT
PRIMARY KEY IDENTITY,
office_name NVARCHAR[40] NOT NULL,
office_address NVARCHAR[255] NOT NULL,
phone VARCHAR[20],
];
7 trong Lược đồ SELECT
s.name AS schema_name,
u.name AS schema_owner
FROM
sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY
s.name;
5CREATE TABLE dbo.offices
[
office_id INT
PRIMARY KEY IDENTITY,
office_name NVARCHAR[40] NOT NULL,
office_address NVARCHAR[255] NOT NULL,
phone VARCHAR[20],
];
Tiếp theo, chèn một số hàng vào bảng
CREATE TABLE dbo.offices
[
office_id INT
PRIMARY KEY IDENTITY,
office_name NVARCHAR[40] NOT NULL,
office_address NVARCHAR[255] NOT NULL,
phone VARCHAR[20],
];
9INSERT INTO dbo.offices[office_name, office_address]
VALUES ['Silicon Valley','400 North 1st Street, San Jose, CA 95130'],
['Sacramento','1070 River Dr., Sacramento, CA 95820'];
Sau đó, tạo thủ tục lưu sẵn để tìm văn phòng theo id văn phòng
CREATE PROC usp_get_office_by_id[
@id INT
] AS
BEGIN
SELECT
*
FROM
dbo.offices
WHERE
office_id = @id;
END;
Cuối cùng, chuyển bảng
CREATE TABLE dbo.offices
[
office_id INT
PRIMARY KEY IDENTITY,
office_name NVARCHAR[40] NOT NULL,
office_address NVARCHAR[255] NOT NULL,
phone VARCHAR[20],
];
9 this sang Lược đồ CREATE SCHEMA customer_services;
GO
9ALTER SCHEMA sales TRANSFER OBJECT::dbo.offices;
Nếu bạn thực hiện thủ tục lưu trữ này
INSERT INTO dbo.offices[office_name, office_address]
VALUES ['Silicon Valley','400 North 1st Street, San Jose, CA 95130'],
['Sacramento','1070 River Dr., Sacramento, CA 95820'];
2, SQL Server sẽ xuất hiện lỗiMsg 208, Level 16, State 1, Procedure usp_get_office_by_id, Line 5 [Batch Start Line 30]
Invalid object name 'dbo.offices'.
Để khắc phục sự cố này, hãy sửa đổi quy trình đã lưu trữ bằng cách sử dụng lược đồ mới
CREATE SCHEMA customer_services;
GO
0Xóa lược đồ bằng câu lệnh DROP SCHEMA trong SQL Server
Tổng quan về câu lệnh DROP SCHEMA trong SQL Server
Lệnh
INSERT INTO dbo.offices[office_name, office_address]
VALUES ['Silicon Valley','400 North 1st Street, San Jose, CA 95130'],
['Sacramento','1070 River Dr., Sacramento, CA 95820'];
3 cho phép bạn xóa lược đồ khỏi cơ sở dữ liệu. Sau đây là cú pháp của câu lệnh INSERT INTO dbo.offices[office_name, office_address]
VALUES ['Silicon Valley','400 North 1st Street, San Jose, CA 95130'],
['Sacramento','1070 River Dr., Sacramento, CA 95820'];
3CREATE SCHEMA customer_services;
GO
1In this cú pháp
- Đầu tiên, chỉ tên của lược đồ mà bạn muốn xóa. Nếu lược đồ chứa bất kỳ đối tượng nào, câu lệnh sẽ không thành công. Do đó, bạn phải xóa tất cả các đối tượng trong lược đồ trước khi xóa lược đồ
- Tiếp theo, sử dụng tùy chọn
5 để xóa lược đồ chỉ khi lược đồ tồn tại. Cố gắng xóa lược đồ không tồn tại mà không có tùy chọnINSERT INTO dbo.offices[office_name, office_address] VALUES ['Silicon Valley','400 North 1st Street, San Jose, CA 95130'], ['Sacramento','1070 River Dr., Sacramento, CA 95820'];
5 sẽ dẫn đến lỗiINSERT INTO dbo.offices[office_name, office_address] VALUES ['Silicon Valley','400 North 1st Street, San Jose, CA 95130'], ['Sacramento','1070 River Dr., Sacramento, CA 95820'];
Ví dụ về câu lệnh DROP SCHEMA trong SQL Server
Đầu tiên, hãy tạo một lược đồ mới có tên là
INSERT INTO dbo.offices[office_name, office_address]
VALUES ['Silicon Valley','400 North 1st Street, San Jose, CA 95130'],
['Sacramento','1070 River Dr., Sacramento, CA 95820'];
7CREATE SCHEMA customer_services;
GO
2Tiếp theo, tạo một bảng mới có tên
INSERT INTO dbo.offices[office_name, office_address]
VALUES ['Silicon Valley','400 North 1st Street, San Jose, CA 95130'],
['Sacramento','1070 River Dr., Sacramento, CA 95820'];
8 bên trong lược đồ INSERT INTO dbo.offices[office_name, office_address]
VALUES ['Silicon Valley','400 North 1st Street, San Jose, CA 95130'],
['Sacramento','1070 River Dr., Sacramento, CA 95820'];
7CREATE SCHEMA customer_services;
GO
3Sau đó, xóa lược đồ
INSERT INTO dbo.offices[office_name, office_address]
VALUES ['Silicon Valley','400 North 1st Street, San Jose, CA 95130'],
['Sacramento','1070 River Dr., Sacramento, CA 95820'];
7CREATE SCHEMA customer_services;
GO
4SQL Server sẽ thông báo lỗi sau vì lược đồ không trống
CREATE SCHEMA customer_services;
GO
5Để xóa lược đồ này, trước tiên bạn phải xóa bảng
CREATE PROC usp_get_office_by_id[
@id INT
] AS
BEGIN
SELECT
*
FROM
dbo.offices
WHERE
office_id = @id;
END;
1 bằng lệnh sauCREATE SCHEMA customer_services;
GO
6Cuối cùng, sử dụng lệnh
INSERT INTO dbo.offices[office_name, office_address]
VALUES ['Silicon Valley','400 North 1st Street, San Jose, CA 95130'],
['Sacramento','1070 River Dr., Sacramento, CA 95820'];
3 một lần nữa để xóa lược đồ INSERT INTO dbo.offices[office_name, office_address]
VALUES ['Silicon Valley','400 North 1st Street, San Jose, CA 95130'],
['Sacramento','1070 River Dr., Sacramento, CA 95820'];
7CREATE SCHEMA customer_services;
GO
7Bây giờ, bạn sẽ thấy rằng lược đồ
INSERT INTO dbo.offices[office_name, office_address]
VALUES ['Silicon Valley','400 North 1st Street, San Jose, CA 95130'],
['Sacramento','1070 River Dr., Sacramento, CA 95820'];
7 đã bị xóa khỏi cơ sở dữ liệuTrong hướng dẫn này, bạn đã học cách tạo, chỉnh sửa và xóa lược đồ [lược đồ] trong cơ sở dữ liệu SQL Server