SQL Server 数据库和表的管理
一、SQL Server 的数据存储结构
SQL Server 是一个数据库管理系统,需要以有效方式存储高容量数据。
1.文件类型
数据库在磁盘上是以文件为单位存储的,由数据库文件和事务日志文件组成。一个数据库至少该包含一个数据文件和一个事务日志文件
SQL Server 数据库具有以下四种类型的文件:
- 主数据文件:包含数据库的启动信息、数据库和对象,如表和索引;主数据文件的后缀名为 .mdf
- 次要(辅助)数据文件:除了主数据文件以外的所有其他数据文件都是次要数据文件;次要数据文件的后缀名为 .ndf
- 事务日志文件:记录所有事务的 SQL 语句、用于恢复数据库;事务日志文件的后缀名为 .ldf
- 文件流(Filestream)数据文件:可以使基于 SQL Server 的应用程序能在文件系统中存储非结构化的数据,如文档、图片、音频、视频等。文件流主要将 SQL Server 数据库引擎和新技术文件系统(NTFS)集成在一起。
2.数据文件
从更微观的角度来看,数据文件由若干个 64KB 大小的区(Extent)组成,每个区由 8 个 8KB 的连续页(Page)组成。
SQL Server 所能识别的最小存储单位被称为页。一个页的大小是 8K,它是 SQL Server 实际存储数据的单位。磁盘 I/O 操作在页级执行。一个区由 8个物理上连续的页(即 64 KB)组成,用来有效地管理页。所有的页都存储在区中。当 SQL Server 中创建了表后,对象就被分配到区中。较小的表可以和其他数据库对象在一个区中。
2.事务日志
事务是一个或多个 T-SQL(Transact–SQL)语句的集合,相当于一个"原子"任务,要么执行成功,要么执行失败。每个 SQL Server 数据库都具有事务日志,用于记录所有事务的 SQL 语句。当发生数据灾难时通过事务日志记录的 T-SQL 语句可以恢复数据库。假如系统出现故障,SQL Server 将使用事务日志前滚(重做)所有已确认的事务,回滚(撤销)所有未完成的事务。
二、数据库相关管理
可以使用 SSMS 工具来设计和建立数据库,存储企业数据,以满足企业需求。
-
未安装 SQL Server 数据库需看:https://blog.csdn.net/weixin_46902396/article/details/110436865 来进行安装。
-
登录数据库:
【开始】|【所有程序】中可以看到Microsoft SQL Server 2008 R2的程序组
1.创建数据库
2.扩展数据库
- 作用:为数据文件和日志文件分配更多的空间。
3.收缩数据库
- 作用:释放数据库中未使用空间
1)手动收缩数据库
收缩数据库:
收缩文件:
2)自动收缩数据库
4.分离和附加数据库
- 作用:将数据库更改到不同 SQL 实例中
1)分离数据库
分离数据库是指将数据库从 SQL Server 实例中移除,但是要保证数据库中的数据文件和日志文件完整无损。之后,这些文件可以重新附加到其他数据库实例中。
2)附加数据库
附加数据时,所有数据文件(主数据文件和次要数据文件)都必须可用。如果任何数据文件的路径不同于首次创建数据库或上次附加数据库时的路径,则必须指定文件的当前路径。
5.删除数据库
只能删除用户数据库,系统数据库无法删除;删除数据库之后,文件及其数据都从服务器上的磁盘中删除。一旦删除数据库,它即被永久删除。
三、表的基本概念
表是包含数据库中所有数据的数据库对象。数据在表中的组织方式与在电子表格中相似,都是按行和列的格式组织的。每行代表一条唯一的记录,每列代表记录中的一个字段。SQL Server 中的表包括下列主要组件:
- 列:每列代表由表建模的对象的某个属性。如,员工表有编号列、姓名列、和职务列等。
- 行:每行代表由表建模的对象的一个单独的实例。如,公司每名员工在表中均占一行。
1.数据完整性
数据完整性是指数据的精确性和可靠性,它是为了防止数据库中存在不符合语义规定的数据和防止因错误信息的输入/输出造成无效操作或错误信息而提出的。它分为以下四类:
1)实体完整性
实体完整性将行定义为特定表的唯一实体。实体完整性通过 UNIQUE(唯一)索引,UNIQUE 约束或 PRIMARY BY(主键)约束,强制表的标识列或主键的完整性。
2)域完整性
域完整性指特定列的项的有效性。可以强制域完整性限制类型(通过使用数据类型)、限制格式(通过使用 CHECK 约束和规则)或限制可能值得范围(通过使用 FOREIGN KEY 约束、CHECK 约束、DEFAULT 定义、NOT NULL 定义和规则)。
3)引用完整性
输入或删除行时,引用完整性保留表之间定义得关系。在 SQL Server 中,引用完整性通过 FOREIGN KEY(外键)和 CHECK(检查)约束,以外键与主键之间或外键与唯一键之间得关系为基础。引用完整性确保键值在所有表中一致。
4)用户定义完整性
用户定义完整性可以定义不属于其他任何完整性类别的特定业务规则。所有完整性类别都支持用户定义完整性,这包括 CREATE TABLE 中所有列级约束和表级约束,存储过程及触发器。
2.主键
主键唯一标识表中的行数据,一个主键值对应一行数据。主键由一个或多个字段组成,其值具有唯一性,而且不允许取空值(NULL),一个表只能有一个主键。
3.使用 SSMS 操作数据表
1)数据类型
数据类型是数据的一种属性,用于指定对象可保存的数据的类型。SQL Server 中数据类型可以归纳为下列类别:精准数字、近似数字、日期和时间、字符串、Unicode 字符串、二进制字符串、其他数据类型。
精准数字可以分为九种数据类型:
数据类型 | 描述 | 存储空间 |
---|---|---|
int | 存储 -231 ~ +231-1 之间的整数 | 4字节 |
bigint | 存储 -263 ~ +263-1 之间的整数 | 8字节 |
smallint | 存储 -215 ~ +215-1 之间的整数 | 2字节 |
tinyint | 存储 0 ~ 255 之间的整数 | 1字节 |
bit | 属于整形数据,其值只能是0、 1 或 NULL(空值) | 1字节 |
decimal | 存储 -1038 ~ +1038-1 之间的数值 | 最多17字节 |
numeric | 等同于 decimal | 最多17字节 |
money | 存储-922337203685477.5808 ~ +922337203685477.5807 之间的数值 |
8字节 |
smallmoney | 存储-214748.3648 ~ +214748.3647 之间的数据 |
8字节 |
近似数字可以分为两种数据类型:
数据类型 | 描述 | 存储空间 |
---|---|---|
float[(n)] | 数值为 -1.79+10308 ~ +1.79+10308之间的任意数 | N<24 - 4字节,N>24 - 8字节 |
real | 数值为 -3.40+1038 ~ +3.40+1038 之间的浮点数 | 4字节 |
日期和时间可以分为六种数据类型:
数据类型 | 描述 | 存储空间 |
---|---|---|
date | 存储从公元元年1月1日到公元9999年12月31日 | 3字节 |
time | 用于表示一天中的某个时间 | 5字节 |
datetime | 存储从1753年1月1日到9999年12月31日 | 8字节 |
datetime2 | 现有datetime类型的扩展,数据范围更大,默认的小数精度更高 | 6~8字节 |
datetimeoffset | 用于表示日期和时间。与datetime2相比,增加了时区 | 8~10字节 |
smalldatetime | 存储从1900年1月1日到2079年6月6,精确到1分钟 | 4字节 |
字符串可以分为三种数据类型:
数据类型 | 描述 | 存储空间 |
---|---|---|
char(n) | N为1~8000字符之间 | n字节 |
varchar(n) | N为1~8000字符之间 | 每字符1字节+2字节额外开销 |
text | 最多为231-1 | 每字符1字节 |
Unicode字符串可以分为三种数据类型:
数据类型 | 描述 | 存储空间 |
---|---|---|
nchar(n) | N为1~4000 | (2n字节)+2字节额外开销 |
nvarchar(max) | 最多为230-1 | 2×字符数+2字节额外开销 |
ntest | 最多为230-1 | 每字符2字节 |
二进制字符串可以分为三种数据类型:
数据类型 | 描述 | 存储空间 |
---|---|---|
binary(n) | 存储可达8000字节长的定长二进制数据。用于输入表的内容接近相同的长度 | n字节 |
varbinary(n) | 存储可达8000字节的变成二进制数据。用于输入表的内容大小可变时 | 每字符1字节+2节点额外开销 |
image | 存储变长的二进制数据,最大可达231 -1或大约20亿字节 | 每字符1字节 |
2)默认值
如果插入行时没有为列指定值,则该列使用默认值。默认值可以是计算结果为常量的任何值,如常量、内置函数或数学表达式。对于表中的每个列,可以指定当用户将该列保留为空白时将在该列中输入的默认值。如果没有分配默认值,并将该列保留位空白,则:
- 如果设置了允许空值的选项,则将向该列中插入 NULL。
- 如果没有设置允许空值的选项,则该列将保持空白,但在用户为该列提供值之前,它们将无法保存行。
3)标识列
对于每个表,均可创建一个包含系统生成的序号值得标识列,该序号值以唯一方式标识表中的每行。
标识符具有以下三种特点:
- 列的数据类型为不带小数的数值类型。
- 在插入(insert)操作时,该列的值由系统按一定规律生成,不允许空值。
- 列值不重复,具有标识表中每行的作用,每个表只能有一个标识列。
创建一个标识列,通常要指定以下三个内容:
- 类型(Type):在 SQL Server 2008 中,标识列类型必须是数值类型,如decimal、int、numeric、smallint、bigint、tinyint。其中要注意的是,当选择了 decimal 和 numeric 时,小数位数必须为零。另外还要注意每种数据类型所表示的数值范围。
- 种子(Seed):指派给表中第一行的值,默认为1。
- 递增量(Increment):相邻两个标识值之间的增量,默认为1.
4)检查约束
通过限制列可接收的值,CHECK 约束可以强制域的完整性。可以通过任何基于逻辑运算符返回 True 或 False 的逻辑(布尔)表达式创建 CHE 约束。
四、T-SQL 语句管理表
SQL Server 的操作也可以使用 T-SQL 语句完成,这也是实际生产环境中数据库管理员最常用的管理数据库的方式。T-SQL 语句的执行一般在查询窗口进行,选中表所在的数据库,单击 SSMS 工具栏中的 “新建查询” 按钮,就可以新建一个查询窗口。
1.创建表
创建表的基本语法如下:
create table 表名
(
列名1 数据类型(大小),
列名2 数据类型(大小),
列名3 数据类型(大小),
...
)
使用 T-SQL 语句创建成绩表
create table 成绩表
(
编号 int identity (1,1) not null,
姓名 nvarchar(50) not null,
身份证号 varchar(18) primary key,
成绩 tinyint not null check(成绩 >=0 and 成绩<=100),
)
注解:
- identity (1,1):表示该列为标识列,种子和增量值都是1。
- not null:标识该列不允许为空值。
- primary key:表示为该列为主键列。
- check ():表示为该列创建约束,括号内为约束条件。
2.查询表
select *from [成绩表]
3.修改表结构
使用 alter table 语句可以对现有的表添加、修改或删除列。
1)添加列
基本语法:
alter table 表名
add 列名 数据类型(大小)
使用 T-SQL 语句向 成绩表 添加一个"备注"列。
alter table [成绩表]
add 备注 nvarchar(2000)
使用 T-SQL 查询成绩表
select *from [成绩表]
2)修改列的数据类型
基本语法:
alter table 表名
alter column 列名 数据类型(大小)
使用 T-SQL 语句修改 成绩表 中"备注"列的长度为 1000。
alter table [成绩表]
alter column 备注 nvarchar(1000)
3)删除列
基本语法:
alter table 表名
drop column 列名
使用 T-SQL 语句删除 成绩表 中的"备注"列。
alter table [成绩表]
drop column 备注
使用 T-SQL 语句查询 成绩表
select *from [成绩表]
4.删除表
基本语法:
drop table 表名
使用 T-SQL 语句删除 成绩表。
drop table [成绩表]
使用 T-SQL 语句查询 成绩表
select *from [成绩表]