SQL Server: 数据库模式SCHEMA
在SQLServer等关系数据库管理系统(RDBMS)中,数据库包含各种对象。
在数据库中,模式(SCHEMA)是指数据库对象的逻辑集合。可以根据应用程序、访问权限和安全性使用模式(SCHEMA)来對对象分組。
SQL Server schemas
SQL Server提供以下内置逻辑模式:
dbo
sys
guest
INFORMATION_SCHEMA
每个SQLServer模式SCHEMA都必须有一个数据库用户作为架构所有者。模式所有者可以完全控制模式。还可以更改模式所有者或将对象从一个模式移动到另一个模式。
SQL Server 模式提供以下好处:
为管理逻辑组中的数据库对象提供更大的灵活性和控制力
允许您在不同模式之间快速移动对象
能够在模式级别管理对象安全性
允许用户管理数据库中的对象逻辑组
允许用户在各种架构之间转移所有权
假设对于公司的数据库,你希望根据部门对对象进行分组。
例如,HR 部门的表和存储过程应该在[HR] 架构中进行逻辑分组。同样,财务部门表应该在 [Fin] 模式中。每个架构(逻辑组)都包含SQL Server 对象,例如表、存储过程、视图、函数、索引、类型和同义词。
员工数据库模式示例
注意:模式是数据库范围的实体。您可以在SQL Server 实例的不同数据库中拥有相同的模式。
默认情况下,SQL Server对数据库中的所有对象使用[dbo] 模式。我们可以查询SCHEMA_NAME() 来获取连接用户的默认模式。
SELECT SCHEMA_NAME() AS defaultschema;
查詢及結果
列出当前数据库中的所有数据库模式
您可以使用 SSMS 或 T-SQL 查询获取模式列表。要在 SSMS 中执行此操作,您将连接到 SQL实例,展开 SQL 数据库并查看安全文件夹下的架构。
或者,您可以使用 sys.schemas获取数据库模式及其各自所有者的列表。
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;
创建
使用 CREATE SCHEMA 创建 SQL Server 架构
要创建新的 SQL Server模式,我们使用 CREATE SCHEMA 语句。它的语法如下所示。
CREATE SCHEMA
AUTHORIZATION
Schema_name:要创建的模式
AUTHORIZATION:模式所有者名称
使用 [dbo] 模式所有者创建模式 [HR]、[Admin] 和 [Fin] 的脚本如下所示。
CREATE SCHEMA HR AUTHORIZATION dbo;
GO
CREATE SCHEMA Admin AUTHORIZATION dbo;
Go
CREATE SCHEMA Fin AUTHORIZATION dbo;
GO
在模式中创建新表
要创建诸如表之类的对象,我们需要指定将在其中创建对象的模式名称。例如,以下脚本在不同的模式 [HR]、[Admin] 和 [Fin] 中创建 [TableA]。
CREATE TABLE [HR].TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)CREATE TABLE [Admin].TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)CREATE TABLE [Fin].TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)
您可以 sys.tables 和 sys.schema 系统表以列出表名及其模式。
例如,以下查询返回[TableA] 及其架模式。
SELECT s.name AS SchemaName,t.name AS TableName
FROM sys.tables t
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id
WHERE t.name ='TableA'
如果在创建对象时未指定模式,SQL Server 将使用默认模式。例如,以下脚本在 dbo 模式中创建了一个 TableA。
CREATE TABLE TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)
注意:您可以在数据库的不同模式中创建具有相似名称的表。
所以您需要指定表的模式才能从正确的模式中获取数据。
例如,如上所示,我们在所有架构中都有[TableA]。因此,如果您直接选择记录而不指定架构,它会在默认 DBO 架构中查找对象。因此,需要指定模式名称,
例如 SELECT * FROM HR.TableA 以进行数据检索或执行任何操作。
在模式中创建存储过程
同样,您可以在指定模式中创建对象,例如存储过程。例如,以下脚本在 HR 模式中创建一个 SP。
CREATE PROCEDURE HR.GetEmpData
AS
BEGINSELECT * FROM [HR].[TableA]
END
将对象转移到不同的模式
在某些时候,您可能需要将对象移动到特定模式。例如,假设您创建了一个新模式[Org],并且您希望您的 [HR].[TableA] 从 [HR] 模式移动到 [Org] 模式。
在这种情况下,可以使用具有以下语法的Alter SCHEMA 命令。
ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;
脚本
CREATE SCHEMA [ORG]
GO
ALTER SCHEMA ORG TRANSFER HR.TableA
现在,将存储过程[HR].[GetEmpData] 转移到 [Org] 模式。
ALTER SCHEMA ORG TRANSFER HR.GetEmpData
执行脚本后,它会显示 [Org]模式中的存储过程。
但是,在SP部,代码仍然引用[HR].[TableA] 模式。
因此,不应使用 ALTER SCHEMA 來移动存储过程、函数或视图,因为它可能具有对象的引用。相反,可以删除、创建或更改SP,如下所示。
删除模式
您可以在 SQL Server 数据库中删除模式,但模式不应包含任何对象。例如,如果我尝试删除 [Org] 模式,它会给出一个错误,即您无法删除模式,因为对象 GetEmpData正在引用它。
因此,可以将对象转移到不同的模式或先删除对象。一旦我们删除或移动了数据库模式中的所有对象,您就可以删除模式。
注意:您不能删除系统模式,例如 dbo、information_schema、sys。
使用数据库模式的优势
数据库模式为我们提供了在数据库中创建逻辑对象组的灵活性。如果多个团队使用同一个数据库,我们可以设计各种模式来分組对象。
数据库模式可帮助数据库专业人员管理访问,因为您可以控制对用户各自模式的访问,而不是提供对整个数据库的访问。
您可以更有效地管理数据库,因为它允许多个模式中的相同对象显示为不同的逻辑组。
您可以在不同的模式中快速移动对象。
模式所有权可以分配给任何数据库主体或角色,所有权也可以转移。
它提供了额外的安全层,因为您需要知道正确的对象模式来查询或操作数据。您还可以控制对模式和模式拥有的对象的访问。
SQL Server: 数据库模式SCHEMA相关推荐
- SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式...
SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式 这篇文章主要介绍了SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式,需 ...
- SQL Server数据库的三种恢复模式
SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式. sql server数据库提供了三种恢复模式:完整,简单和大容量日志,这些模式决定了sql server如何 ...
- SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式
这篇文章主要介绍了SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式,需要的朋友可以参考下 如何图形界面下修改恢复模式 找到你想修改的数据库 右键 > 属性 ...
- SQL Server数据库单用户模式设置
将数据库设置为单用户模式 单用户模式是指只有一个用户可以访问某个资源的状态. SQL Server数据库单用户模式设置 在进行一些数据库操作时,需要先把数据库设置为单用户模式,操作完成后再改回普通模式 ...
- JDBC连接SQL Server数据库[windows验证模式连接+SQL server验证]
JDBC连接SQL Server数据库[windows验证模式连接+SQL server验证] 都说用JDBC连接数据库会出现很多问题,现总结.汇总一下. 前提是已经正确安装了SQL Server系列 ...
- 记录MS SQL Server数据库
目录 介绍 如何使用文档工具记录SQL Server数据库 使用dbForge Documenter for SQL Server 记录数据库 结论 介绍 所有公司都会积累各种数据,而这些数据最终不可 ...
- SQL Server 数据库原理与应用
1. 数据库概述 名词解释: DB:数据库 DBMS:数据库管理系统 DBS:数据库系统 DBA:数据库管理员 DBAS:数据库应用系统 数据管理的三个阶段:人工管理.文件系统阶段.数据库系统阶段. ...
- 如何对AWS RDS SQL Server数据库进行分类
This article gives you an overview of cataloging AWS RDS SQL Server database objects like tables and ...
- 如何记录SQL Server数据库对象
介绍 (Introduction) In any good programming reference, you will read that a developer has to document ...
最新文章
- 关于页面打印window.print()的样式问题
- 小问题(可能持续更新)
- python读取数据的函数详解_你了解文件缓存机制吗?磁盘文件如何读写?Python中open函数详解...
- Linux内核省电社区,Linux 内核社区补丁对比
- Android获取手机及外设存储空间
- spicy命令_Spicy Spring:动态创建自己的BeanDefinition
- Java ResourceBundle getLocale()方法与示例
- 计算机模拟病例考试试题,计算机模拟病例考试评分方法的研究概述
- 个人博客系统毕业设计开题报告
- 《设计模式详解》创建型模式 - 建造者模式
- vuex实例方法replaceState解决vuex页面刷新数据丢失问题
- 自建同步云盘服务器,自建云盘系列——Syncthing (BT Sync的开源替代)
- Java—求最大公约数和最小公倍数
- K210学习笔记——语音识别
- 设置电脑的背景颜色为保护色
- python xlsm_Excel中的xls、xlsx、xlsm混合文件,看我如何用Python统一处理!
- Unity如何画线条之美
- GNU 和 UNIX 命令
- 大数据利益相关者的利益矛盾及其伦理治理
- gridStudio 安装(linux)