65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL Schema 基本入门

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2020年12月7日

CPOL

4分钟阅读

viewsIcon

6905

本文将使用DDL语句向您展示SQL Schema的基础知识。

引言

早在2005年,我第一次听到并注意到schema时,我完全忽略了它,因为我习惯使用dbo作为我的默认schema。但是,随着时间的推移,我决定理解并在我的数据库项目中使用它,直到我更习惯使用它。因此,我将分享一些我对SQL Server schema的看法。 好了,让我们开始吧。

目录

什么是数据库Schema?

  • 数据库schema充当表、视图、存储过程等对象的容器。
  • 假设您熟悉其他编程语言中的命名空间;它与schema类似。 此外,schema用于在对象名称前添加前缀。 例如,假设您在HR的schema中有一个名为Employee的表。 那么,schema限定的对象名称是HR.Employee

为什么我们需要Schema?

我们大多数人可能最熟悉默认的和内置的schema,即dbo。 一旦您创建了一个没有schema的对象,dbo就成为该对象的默认schema。 从可管理性的角度来看,这种做法被认为是不好的。 这就是为什么将对象逻辑地分离成组或schema是被接受的。

SQL Server中有哪些内置Schema?

默认情况下,SQL Server提供了几个存在于新创建的数据库中的schema,例如dbosysguestinformation_schema schema等等。 默认情况下,新创建的对象使用dbo schema,而其他系统对象使用sysinformation_schema schema。

让我们看看如何列出数据库的schema。

SELECT 
	schema_id [Id],
	name [Schema Name]
FROM SYS.SCHEMAS
ORDER BY name

输出

SQL_Server_List_Of_Schema

如何创建Schema?

CREATE SCHEMA语句很简单,当然,它会在您选择的数据库中创建一个新的schema。

让我们看下面的一个例子

--CREATE A NEW SCHEMA 
CREATE SCHEMA MY_SCHEMA; 
GO

让我们创建一个包含AUTHORIZATION关键字的新schema。

CREATE LOGIN JIN_USER
	WITH PASSWORD = '123456';
GO

CREATE USER JIN_USER FOR LOGIN JIN_USER;

CREATE SCHEMA MY_SCHEMA2 AUTHORIZATION JIN_USER;

输出

Create_Schema_Statement_With_Authorization_Keyword

如何在Schema下创建对象?

一旦您在数据库中创建了一个schema,您现在就可以为该schema创建对象。 就像在我们的例子中,我们创建了一个名为MY_SCHEMA2的新schema。 现在将展示如何在schema下创建表。

让我们看下面的例子

USE [EMPLOYEE_DEPARTMENT_DB];

CREATE TABLE [MY_SCHEMA2].ORDERS
(
	OrderId int NOT NULL
);
GO

Create_Schema_Statement

如何修改Schema?

当涉及到修改schema时,首先想到的是重命名schema名称。 但是,您不能直接重命名schema,但可以使用ALTER SCHEMA语句将对象的schema移动到新的schema。

让我们看下面的例子

USE [EMPLOYEE_DEPARTMENT_DB];
GO 

--create a new schema
CREATE SCHEMA [MY_SCHEMA_3] AUTHORIZATION JIN_USER;
GO

-- transfer the old schema to the newly created one
-- see the examples below. 

ALTER SCHEMA [MY_SCHEMA_3] TRANSFER  [MY_SCHEMA2].CUSTOMERS;
GO

ALTER SCHEMA [MY_SCHEMA_3] TRANSFER	[MY_SCHEMA2].ORDERS;
GO

输出

如何删除Schema?

DROP SCHEMA语句允许您从数据库中删除一个schema。 但是,需要注意的是:要成功执行此语句,该schema不能使用任何对象(如表)。

让我们首先看看删除一个没有任何对象引用的schema。

USE [EMPLOYEE_DEPARTMENT_DB];
GO 

CREATE SCHEMA MY_SCHEMA_WITHOUT_REFERENCES; 
GO

DROP SCHEMA MY_SCHEMA_WITHOUT_REFERENCES;
GO 

让我们看看如何删除一个引用表对象的schema。

当我们看下面的屏幕截图作为我们的例子时,我们可以看到MY_SCHEMA_3 schema下有两个表。

一旦我们决定删除MY_SCHEMA_3 schema,我们最终会得到一个错误,因为我们需要首先删除这些引用。 在我们释放这些引用之前,让我们先看看。

USE [EMPLOYEE_DEPARTMENT_DB];
GO

DROP SCHEMA [MY_SCHEMA_3];
GO 

输出

为了消除错误并成功执行它,我们需要删除被引用的对象,即CUSTOMERSORDERS表,以完全删除该schema。

查看下面的更新后的脚本。

USE [EMPLOYEE_DEPARTMENT_DB];
GO

DROP TABLE [MY_SCHEMA_3].[ORDERS];
DROP TABLE [MY_SCHEMA_3].[CUSTOMERS];

DROP SCHEMA [MY_SCHEMA_3];
GO 

正如您所看到的,即使在删除schema之前,我们也需要首先删除对象。 在本例中,我们删除了表ORDERSCUSTOMERS。 最后,我们删除了相关的schema,在本例中是MY_SCHEMA_3

摘要

在这篇文章中,我们学习了SQL Schema的基础知识。 此外,我们还讨论了数据库schema的创建、修改和删除。 我希望您喜欢这篇文章,就像我喜欢写它一样。 请继续关注更多内容。 下次再见,祝您编程愉快! 请不要忘记收藏、评分和/或评论。 感谢您的阅读!

© . All rights reserved.