架构
定义架构
架构(schema,也称为模式)是数据库下的一个逻辑命名空间,可以存放表、视图等数据库对象,它是一个数据库对象的容器。
一个数据库可包含一个或多个架构,由特定的授权用户所拥有。在同一个数据库中,架构名必须唯一。
架构对象的类型包括:基本表、视图、触发器等。
CREATE SCHEMA schema_name_clause [ <schema_element> [ ...n ] ]
<schema_name_clause> ::= {
schema_name
| AUTHORIZATION owner_name
| schema_name AUTHORIZATION owner_name }
<schema_element> ::= {
table_definition | view_definition | grant_statement
revoke_statement | deny_statement }
实例:
--为用户“U1”定义一个架构,架构名为“Salse”
create schema Salse authorization U1
--创建由U1拥有、包含Test表的架构Common,同时授予U2对Test表有SELECT权,
--授予U3不能对Test表有删除权限
create schema Common authorization U1
create table Test (
C1 int primary key,
C2 char(4) )
grant select TO U2
deny delete TO U3;
在架构之间传输对象
在架构之间传输对象就是更改对象所属的架构。
alter schema 移入的架构名 transfer 被移出架构的名字
实例:
--将Test表从Common架构传输到Special架构中。
altrer schema Special transfer Commer.Test
删除架构
drop schema 架构名
实例:
--删除Special架构,假设该架构中包含Test表
drop table Special.Test; --删除架构中的对象
drop schema Special; --删除架构
基本表
创建基本表
普通表:
有计算列的表:
create table comptable (
low int,
high int,
myavg as(low+high)/2
)
创建临时表
临时表是存储在内存中的表,临时表根据其使用范围可以分为两种:本地临时表和全局临时表。
本地临时表:在表名前加“#”
全局临时表:在表名前加“##”
修改基本表
在定义完表之后,如果需要修改表结构,比如添加列、删除列或修改列定义,可以使用alter table语句实现。
删除表
drop table 表名
分区表
分区表是把数据按某种标准划分成区域存储在不同的文件组中,使用分区可以快速而有效地管理和访问数据子集,从而使大型表或索引更易于管理。
合理的使用分区会在很大程度上提高数据库的性能。
以下情况时适合分区:
- 表中数据量大;
- 该表包含(或将包含)以多种不同方式使用的大量数据。
- 数据是分段的,比如数据以年为分隔。
- 对表的常规维护操作只针对表的一个数据子集。
分区表的特点:
- 分区表是从物理上将一个大表分成几个小表,但从逻辑上来看,还是一个大表。
- 对用户而言,所面对的依然是一个大表,他们不需要考虑操作的年份对应的小表,用户只要将记录插入到大表——逻辑表中就可以了,数据库管理系统会自动将数据放置到它对应的那个物理小表中。
创建分区函数
左侧分区:
--在 int 列上创建左侧分区函数。下列分区函数将表分为四个分区
create partition function myrangepf1(int)
as range left for values(1,100,1000);
右侧分区:
--在 int 列上创建右侧分区函数。下列分区函数将表分为四个分区
create partition function myrangepf2(int)
as range right for values(1,100,1000);
创建分区方案
--先创建一个分区函数,该函数将表分为四个分区。
--然后创建一个分区方案,在其中指定拥有这四个分区中每一个分区的文件组
create partition function myrangepf1(int)
as range left for values(1,100,1000);
go
create partition scheme myRangePS1
as partition myRangePF1
to (test1fg, test2fg, test3fg, test4fg);
分区分配情况:
特殊分区方案:
--本示例首先创建一个分区函数,将数据分为四个分区。
--然后创建一个分区方案,最后创建使用该分区方案的表。
--本示例假定数据库中已经存在文件组。
create partition function myrangepf1(int)
as range left for values(1,100,1000);
go
create partition scheme myRangePS1
as partition myRangePF1
to (test1fg, test2fg, test3fg, test4fg);
go
create table partition (
col1 int,
col2 char(10),
on myrangeps1(col1);