MSSQL之二 Sql Server中管理库与表


作为数据库开发人员,你负责创建和管理数据库和表。当创建表的时候,维护数据的完整性对你是很重要的。为确保表中的数据是准确的,一致的和可靠的,SQL Server提供了各种你可以应用到表上以增强数据完整性的检查。

SQL Server包含各种系统数据库。本章介绍不同类型的系统数据库并且解释如何管理用户定义的数据库和管理用户自定义表。

重点

?      管理数据库

?      管理表

?      SQL Server 2008中的数据类型

预习功课

?        创建数据库

?        修改数据库

?        删除数据库

?        创建表

?        修改表

?        删除表

识别SQL Server 2008中识别系统数据库

SQL Server 2008有4个系统数据库,它们分别为Master、Model、Msdb、Tempdb。

(1)Master数据库是SQL Server系统最重要的数据库,它记录了SQL Server系统的所有系统信息。这些系统信息包括所有的登录信息、系统设置信息、SQL Server的初始化信息和其他系统数据库及用户数据库的相关信息。因此,如果master 数据库不可用,则 SQL Server 无法启动。在 SQL Server 2008 中,系统对象不再存储在 master 数据库中,而是存储在Resource
数据库中。

(2)model 数据库为在 SQL Server 实例上创建的所有数据库的提供模板。因为每次启动 SQLServer 时都会创建 tempdb,所以 model 数据库必须始终存在于 SQL Server 系统中。当发出 CREATE DATABASE(创建数据库)语句时,将通过复制 model 数据库中的内容来创建数据库的第一部分,然后用空页填充新数据库的剩余部分。 如果修改 model 数据库,之后创建的所有数据库都将继承这些修改。例如,可以设置权限或数据库选项或者添加对象,例如,表、函数或存储过程。

(3)Msdb数据库是代理服务数据库,为其报警、任务调度和记录操作员的操作提供存储空间。

(4)Tempdb是一个临时数据库,它为所有的临时表、临时存储过程及其他临时操作提供存储空间。Tempdb数据库由整个系统的所有数据库使用,不管用户使用哪个数据库,他们所建立的所有临时表和存储过程都存储在tempdb上。SQL Server每次启动时,tempdb数据库被重新建立。当用户与SQL Server断开连接时,其临时表和存储过程自动被删除。

数据库中的存储结构

数据库的存储结构分为逻辑存储结构和物理存储结构两种。

1、数据库的逻辑存储结构指的是数据库是由哪些性质的信息所组成,SQL Server的数据库不仅仅只是数据的存储,所有与数据处理操作相关的信息都存储在数据库中。实际上,SQL Server的数据库是由诸如表、视图、索引等各种不同的数据库对象所组成,它们分别用来存储特定信息并支持特定功能,构成数据库的逻辑存储结构。

2、数据库的物理存储结构则是讨论数据库文件是如何在磁盘上存储的。数据库在磁盘上是以文件为单位存储的,由数据库文件和事务日志文件组成,一个数据库至少应该包含一个数据文件和一个事务日志文件,可以有多个第二数据文件。实际上这句话可以这样理解:“数据库中有且仅有一个主数据文件,至少有一个事物日志文件(也就是说可以有多个但必须有),可以有多个第二数据文件(可以没有)”那么什么是“主数据库文件”“第二数据文件”“事物日志文件呢”

数据库中文件与文件组

数据文件又可以分成主数据文件和次数据文件两种形式。

1. 主数据库文件(Primary Database File)

主数据文件是数据库的起点,每一个数据库都有且仅有一个主数据文件。主数据文件名称的默认后缀是mdf。次数据文件是可选的,它们可以存储不在主数据文件中的全部数据和对象。

2. 第二数据库文件(Secondary Database File)

第二数据库文件又称之为次数据库文件,数据库既可能没有次数据文件,也可能有多个次数据文件。次数据文件名称的默认后缀是ndf。

3. 事务日志文件

事务就是一个单元的工作,该单元的工作要么全部完成,要么全部不完成。Microsoft SQL Server系统具有事务功能,可以保证数据库操作的一致性和完整性。

Microsoft SQLServer系统使用数据库的事务日志来实现事务的功能。事务日志记录了对数据库的所有修改操作。日志记录了每一个事务的开始、对数据的改变和取消修改等操作的足够信息。随着对数据库的操作,日志是连续增加的。对于一些大型操作,如创建索引,日志只是记录该操作的事实,而不是记录所发生的数据。事务日志还记录了数据页的分配和释放,以及每一个事务的提交和滚回。这样就允许SQL Server系统要么恢复事务,要么取消事务。事务日志以操作系统文件的形式存在,在数据库中被称为日志文件。

每一个数据库都至少有一个日志文件。日志文件名称的后缀默认是ldf

4. 文件组

为了便于分配和管理,SQL Server允许将多个文件归纳为同一组,并赋予这个组一个名称,这就是文件组。

文件组就是文件的逻辑集合。为了方便数据的管理和分配,文件组可以把一些指定的文件组合在一起。例如,在某个数据库中,3个文件(data1.ndf、data2.ndf和data3.ndf)分别创建在3个不同的磁盘驱动器中,然后为它们指定一个文件组fgroup1。以后,所创建的表可以明确指定放在文件组fgroup1上。对该表中数据的查询将分布在这3个磁盘上,因此,可以通过执行并行访问而提高查询性能。

在创建表时,不能指定将表放在某个文件上,只能指定将表放在某个文件组上。因此,如果希望将某个表放在特定的文件上,那么必须通过创建文件组来实现。

定义数据库

定义数据库就是从无到有地创建数据库和设置数据库选项。

这个部分从三个方面讲述定义数据库,即创建数据库、设置数据库选项和查看数据库信息。

创建数据库就是确定数据库名称、文件名称、数据文件大小、数据库的字符集、是否自动增长以及如何自动增长等信息的过程。

在一个Microsoft SQL Server实例中,最多可以创建32767个数据库。数据库的名称必须满足系统的标识符规则。在命名数据库时,一定要使数据库名称简短和具有一定的含义。

数据库创建之后,根据需要可以使用ALTER DATABASE语句对数据库进行修改。修改操作可以包括更改数据库名称、扩大数据库、收缩数据库、修改数据库文件、管理数据库文件组、修改字符排列规则等。

?       修改数据库名字

【例2-4】将LCBCom数据库的名称更改为LGCom

?       扩大数据库

在Microsoft SQLServer系统中,如果数据库的数据量不断膨胀,可以根据需要扩大数据库的尺寸。

有3种扩大数据库的方式。第一种方式是设置数据库为自动增长方式,可以在创建数据库时设置。第二种方式是直接修改数据库的数据文件或日志文件的大小,第三种方式是在数据库中增加新的次要数据文件或日志文件。

【例2-5】通过扩大文件来扩大LGCom数据库

?       修改数据库文件

用户可以根据需要使用ALTER DATABASE语句修改数据库中指定的文件。这些修改操作包括增加数据文件、在指定的文件组中增加指定文件、增加日志文件、删除指定的文件等。

增加数据文件、修改指定的文件等操作已经讲过了,下面通过一些示例讲述有关数据库文件的其他操作。

【例2-6】在指定的文件组中增加文件

?       管理文件组

文件组是数据库数据文件的逻辑组合,它可以对数据文件进行管理和分配,以便提高数据库文件的并发使用效率。

Transact-SQL语言没有提供独立的管理文件组的命令,只能通过ALTER DATABASE语句提供了管理文件组的命令。

管理数据库中的表

设计数据库实际上就是设计数据库中的表。在设计数据库中的表时,目标是使用尽可能少的表数量、每个表中包含尽可能少的列数量来达到设计要求。合理的表结构,可以大大提高整个数据库数据查询效率。

?       创建表和修改表

本节主要围绕创建和修改表展开讨论。

内容包括创建表、增加和删除列、修改列的属性、设置标识符列、查看表的信息、删除表等。

在Microsoft SQLServer 2008系统中,既可以使用CREATE TABLE语句创建表,也可以使用可视化的SQL Server Management Studio图形工具。下面主要研究如何使用CREATE TABLE语句创建表。CREATE TABLE语句是一种经常使用的创建表的方法,也是一种最灵活、最强大的创建表的方式。

【例2-7】使用CREATE TABLE语句创建students表

【例2-8】使用CREATE TABLE语句创建orders表

表创建之后,用户可以根据需要使用ALTER TABLE语句修改表的结构。在表中增加新列、删除已有的列是常见的修改表结构的操作。

当用户向表中添加一个新列时,Microsoft SQLServer为表中该列在已有数据的每一行中的相应位置插入一个数据值。

因此,当向表中增加一个新列时,最好为该新列定义一个默认约束,使该列有一个默认值。如果该新列没有默认约束,并且表中已经有了其他数据,那么必须指定该新列允许空值,否则系统将产生一个错误信息。

【例2-10】使用ALTER TABLE语句增加表中的列

使用ALTER TABLE语句除了可以增加新列和删除列之外,还可以对列的属性进行更改。本节主要讲述如何更改列的数据类型。使用ALTER TABLE语句更改列的数据类型的基本语法形式如下所示:

ALTER TABLEtable_name ALTER COLUMN column_name new_type_name

在上面的语法中,table_name参数指定将要更改的表名称,ALTER COLUMN子句用于指定将要更改的列名称和新的数据类型名称,column_name参数指定列名称,new_type_name参数指定新的数据类型名称

【例2-12】使用ALTER TABLE语句更改列的数据类型

标识符列表示唯一地标识表中的每一行数据的符号。

在Microsoft SQL Server 2008系统中,可以创建两种类型的标识符列,即IDENTITY列和ROWGUIDCOL列。

下面,详细研究这两种标识符列的创建和修改方式。

使用IDENTITY属性的列是IDENTITY列,每一个表中最多只能有一个IDENTITY列。

定义IDENTITY属性时需要指定两个值:种子值和增量值。这样,表中第一行的IDENTITY列的值是种子值,其他行的IDENTITY列的值是在前一行值的基础上增加一个增量值得到的。

【例2-13】使用IDENTITY属性

IDENTITY属性的作用范围是表。也就是说,在一个指定的表中,IDENTITY属性列的值不会有重复值。但是,不同的表之间是有可能存在IDENTITY属性列的值相同的现象。在执行合并多个表的复制操作中,这种现象是必须避免的。Microsoft SQL Server系统提供的用于标识符列的ROWGUIDCOL属性可以解决这种问题。ROWGUIDCOL列是全局唯一标识符列。每一个表中最多可以创建一个ROWGUIDCOL列。

【例2-14】使用ROWGUIDCOL列

?       删除表

删除表就是将表中数据和表的结构从数据库中永久性地去除。表被删除之后,就不能再恢复该表的定义。

删除表可以使用DROPTABLE语句来完成,该语句的语法形式如下:

DROPTABLE table_name

不能使用DROPTABLE语句删除正在被其他表中的外键约束参考的表。当需要删除这种有外键约束参考的表时,必须首先删除外键约束,然后才能删除该表。表的所有者可以删除自己的表。当删除表时,绑定在该表上的规则和默认将失掉绑定。属于该表的约束或触发器则自动地被删除。如果重新创建表时,必须重新绑定相应的规则和默认、重新创建触发器和增加必要的约束。

实践问题

1、拥有什么权限的用户能够使用 DROPDATABASE 命令删除数据库

2、用什么样的命令能够修改数据库的名字、大小。

3、用命令创建一个数据表

4、用命令修改一个数据表

5、怎样删除一个表

小结

1、SQL SERVER中自带的数据库

Master数据库记录所有服务器特定的配置信息,包括认证用户、数据库、系统配置设置和远程服务器

Tempdb 数据库保存所有临时表和存储过程的临时数据库。

Model数据库是作为新数据库的模版或原型

Msdb数据库支持SQL Server代理,SQLServer代理包括计划SQL Server的周期性活动的特征

2、Create Database 语句被用于创建数据库,他也包含确定数据库的名称、数据库的大小和在数据中用于存储数据的文件。

3、Drop Database语句被用于删除数据库。

4、Create Table语句被用于创建表。

5、Alter Tabel 语句用于修改表

6、Drop Table 语句用于删除表

时间: 2024-10-11 16:55:02

MSSQL之二 Sql Server中管理库与表的相关文章

MS Sql Server 中主从库的配置和使用介绍(转)

网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求:这时候我们可以考虑使用主从库. 主从库是两台服务器上的两个数据库,主库以最快的速度做增删改操作+最新数据的查询操作:从库负责查询较旧数据,做一些对实效性要求较小的分析,报表生成的工作.这样做将数据库的压力分担到两台服务器上从而保证整个系统响应的及时性. SQL Server提供了复制机制来帮我们实现主从库的机制.我们看下如何在sql server 2005中实践: 实践前需要新创建一个Test的数据库

sql Server中临时表与数据表的区别

sql server 中临时表与数据表的区别 1.如何判断临时表和数据表已生成 --如何判断临时表是否已创建--- if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#Temp_Student')) begin print '存在临时表'; end else begin print '不存在临时表'; end --如何判断数据表是否已创建--- if exists(select * from sys.ta

SQL Server中的临时表和表变量 Declare @Tablename Table

在SQL Server的性能调优中,有一个不可比面的问题:那就是如何在一段需要长时间的代码或被频繁调用的代码中处理临时数据集?表变量和临时表是两种选择.记得在给一家国内首屈一指的海运公司作SQL Server应用性能评估和调优的时候就看到过大量的临时数据集处理需求,而他们的开发人员就无法确定什么时候用临时表,什么时候用表变量,因此他们就简单的使用了临时表.实际上临时表和表变量都有特定的适用环境.先卖弄一些基础的知识:表变量变量都以@或@@为前缀,表变量是变量的一种,另外一种变量被称为标量(可以理

MS Sql Server 中主从库的配置和使用介绍

https://technet.microsoft.com/zh-cn/ff806143.aspx 网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求:这时候我们可以考虑使用主从库. 主从库是两台服务器上的两个数据库,主库以最快的速度做增删改操作+最新数据的查询操作:从库负责查询较旧数据,做一些对实效性要求较小的分析,报表生成的工作.这样做将数据库的压力分担到两台服务器上从而保证整个系统响应的及时性. SQL Server提供了复制机制来帮我们实现主从

Sql Server中清空所有数据表中的记录

清空所有数据表中的记录: 代码如下:exec sp_msforeachtable  @Command1 ='truncate table ?'删除所有数据表: 代码如下:exec sp_msforeachtable 'delete   N''?'''清空SQL Server数据库中所有表数据的方法(有约束的情况) 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公

SQL Server中的临时表和表变量

在SQL Server的性能调优中,有一个不可比拟的问题:那就是如何在一段需要长时间的代码或被频繁调用的代码中处理临时数据集?表变量和临时表是两种选择.记 得在给一家国内首屈一指的海运公司作SQL Server应用性能评估和调优的时候就看到过大量的临时数据集处理需求,而他们的开发人员就无法确定什么时候用临时表,什么时候用表变量,因此他们就简 单的使用了临时表.实际上临时表和表变量都有特定的适用环境. 先卖弄一些基础的知识: 表变量 变量都以@或@@为前缀,表变量是变量的一种,另外一种变量被称为标

T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他

简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索引的概念,需要了解大量原理性的知识,包括B树,堆,数据库页,区,填充因子,碎片,文件组等等一系列相关知识,这些知识写一本小书也不为过.所以本文并不会深入讨论这些主题. 索引是什么 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息. 精简来说,索引是一种结构.

SQL Server中的事务日志管理(9/9):监控事务日志

当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会告诉你每个DBA应该知道的具体细节. 对于在我们关注下的所有数据库,在日志维护方面,我们的首要目标是最优化写性能,为了支持SQL Server写入日志的所有活动,包括数据修改,数据读取,索引维护等等.但是,留意下可能的日志碎片也是重要的,如前面文章介绍的,它会影响需要读取日志的过程性能,例如日志备份

浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色

浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色 本篇文章是系列文章中的第二篇,以防你还没有看过第一篇.上一篇的文章地址如下: 浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 简介 每一个SQL Server的数据库都会按照其修改数据(insert,update,delete)的顺序将对应的日志记录到日志文件.SQL Server使用了Write-Ahead logging技术来保证了事务日志的原子性和持久性.而这项技术不仅仅保证了ACID