SQL Schema 基本入门





5.00/5 (2投票s)
本文将使用DDL语句向您展示SQL Schema的基础知识。
引言
早在2005年,我第一次听到并注意到schema时,我完全忽略了它,因为我习惯使用dbo
作为我的默认schema。但是,随着时间的推移,我决定理解并在我的数据库项目中使用它,直到我更习惯使用它。因此,我将分享一些我对SQL Server schema的看法。 好了,让我们开始吧。
目录
- 什么是数据库Schema?
- 为什么我们需要Schema?
- SQL Server中有哪些内置Schema?
- 如何创建Schema?
- 如何在Schema下创建对象?
- 如何修改Schema?
- 如何删除Schema?
- 摘要
什么是数据库Schema?
- 数据库schema充当表、视图、存储过程等对象的容器。
- 假设您熟悉其他编程语言中的命名空间;它与schema类似。 此外,schema用于在对象名称前添加前缀。 例如,假设您在HR的schema中有一个名为
Employee
的表。 那么,schema限定的对象名称是HR.Employee
。
为什么我们需要Schema?
我们大多数人可能最熟悉默认的和内置的schema,即dbo
。 一旦您创建了一个没有schema的对象,dbo
就成为该对象的默认schema。 从可管理性的角度来看,这种做法被认为是不好的。 这就是为什么将对象逻辑地分离成组或schema是被接受的。
SQL Server中有哪些内置Schema?
默认情况下,SQL Server提供了几个存在于新创建的数据库中的schema,例如dbo
、sys
、guest
和information_schema
schema等等。 默认情况下,新创建的对象使用dbo
schema,而其他系统对象使用sys
和information_schema
schema。
让我们看看如何列出数据库的schema。
SELECT
schema_id [Id],
name [Schema Name]
FROM SYS.SCHEMAS
ORDER BY name
输出
如何创建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;
输出
如何在Schema下创建对象?
一旦您在数据库中创建了一个schema,您现在就可以为该schema创建对象。 就像在我们的例子中,我们创建了一个名为MY_SCHEMA2
的新schema。 现在将展示如何在schema下创建表。
让我们看下面的例子
USE [EMPLOYEE_DEPARTMENT_DB];
CREATE TABLE [MY_SCHEMA2].ORDERS
(
OrderId int NOT NULL
);
GO
如何修改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
输出
为了消除错误并成功执行它,我们需要删除被引用的对象,即CUSTOMERS
和ORDERS
表,以完全删除该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之前,我们也需要首先删除对象。 在本例中,我们删除了表ORDERS
和CUSTOMERS
。 最后,我们删除了相关的schema,在本例中是MY_SCHEMA_3
。
摘要
在这篇文章中,我们学习了SQL Schema的基础知识。 此外,我们还讨论了数据库schema的创建、修改和删除。 我希望您喜欢这篇文章,就像我喜欢写它一样。 请继续关注更多内容。 下次再见,祝您编程愉快! 请不要忘记收藏、评分和/或评论。 感谢您的阅读!