模式:在sql-server中创建模式其实就是为用户创建一个架构(命名空间)。在旧版本的sql-server中,没有架构这个说法,这是因为以前的sql-server使用用户名来充当架构,就是说用户名跟架构其实隐式的连在一起的,不需要我们关心。但后来的sql-server版本为了便于管理,就将架构和用户名分开了。

来看下创建模式的好处:下图是我创建的数据库和表格。下图已经存在一个模式为dbo(默认模式)的表格st。如果你再直接使用默认的模式(架构)创建st表,就会提示st已经存在,不能重复创建。

sql server 新建模型 sql server建立模式_sql server 新建模型

但是如果我们使用其他模式创建st表,就不会冲突了。下图我们使用了changqing模式,结果又创建了一个st表。这就是模式(构架)的好处,使得在同一个数据库下可以使用同样的表格名称。

sql server 新建模型 sql server建立模式_sql_02

 

一、模式创建(架构创建)

下图我们使用已经创建好的数据库school, 和数据库用户changqing。(如果没有创建,请自己创建一个数据库用户)

创建模式定义时,调用该命令的用户必须拥有管理员权限,否则无法创建。而且不能为登录名创建模式,必须是具体的数据库的用名。

注:不过,实际大部分登录名就是数据库用户名,少部分不是,如sa是登陆名,实际它对应的数据库用户名是dbo,所以只能为dbo用户创建模式,而不能为sa创建, 因为sa是登录名不是用户名。

总结重要两点(管理员权限才能创建,必须使用数据库用户名)。

创建模式为:下面的例子是为shool数据库用户changqing创建一个test模式,可以看到此用户拥有了test架构。

use school 
create schema  test authorization changqing;

sql server 新建模型 sql server建立模式_数据库_03

 

二、使用模式创建表格

1.如果创建表格时不指定模式,系统默认创建dbo模式,

如下:

use school
go
create table  student(
    Sno char(9)  primary key,
    Sname char(20)unique,
    Ssex char(2),
    Sage smallint,
    Sdept char(20)

);
go

sql server 新建模型 sql server建立模式_数据库_04

这句sql语句执行会创建一个dbo模式的student,由于dbo模式的student已经存在,所以执行失败。

 

2.创建表格的时候指定模式,

sql语句如下

use school
go
create table  test.student(
    Sno char(9)  primary key,
    Sname char(20)unique,
    Ssex char(2),
    Sage smallint,
    Sdept char(20)

);
go

sql server 新建模型 sql server建立模式_sql server_05

这句sql语句创建一个test模式的student表。

 

三、删除模式

如果在该模式下建立了表格或则视图等,应该先删除这些表格视图,然后才能删除此模式。如下图,test模式被student表使用,所以不允许删除。

sql server 新建模型 sql server建立模式_sql_06

应该先删除引用test模式的student表,然后才能删除模式test。

sql server 新建模型 sql server建立模式_用户名_07