SQL-Server数据库学习笔记-表

1. 表及其属性

表(Table):也称实体,是存储同类型数据的集合。

列(Field):也称字段、域或属性,它构成表的架构,具体表示为一条信息中的一个属性。

行(Row):也称元组(Tuple),存储具体的条数据。

码(Key):也称主键,就像人的身份证号码,是一个独一无二的字符,代表当前这条数据的标识。

外键(FK):这就是关系,代表一条信息与其他信息之间的关联。

2. 表的特点

表在数据库中体现是一张由行和列组成的二维表格。行在很多时候也称记录,列则成为字段或者域。

表中的每一个字段都对应一个实体的描述。没有多余的,也不能方多余的字段进去。当然这句话也不绝对,有时候考虑到系统的二次开发或者系统需求改变,也可能会特意留下一两个备用字段。

在表中,每一行数据的顺序是可以随意变换的,一般都是按照插入数据的先后顺序排列。也可以按照索引对数据进行排序,总之,这里的数据行排列不影响以后编程过程中的排序。

但是行之间的数据也精良不要重复,这个是由主键控制的,因为主键规定了在一张表中不允许重复。

如同行的顺序一样,列的顺序也是可以随意排列的,用户最多可以为一张表定义1024个列。在同一张表中,列名必须唯一,多张表之间则不受此限制。每一列必须在定义的时候同时定义数据类型。这些都是由SQL Server系统来控制得。

在同一数据库中,表名不允许重复。这是默认情况,如果你一定要重复也不是没有办法,新建一个架构,然后让两张同名的数据表在不同的架构下面就行了。默认表都在dbo架构下。

3. 表的类型

在SQL Server2008中,按照表的作用,可以将表分为以下4中类型。

1)普通表

普通表又称为标准表,就是通常用来在数据库中存储数据的表,是最常用的对象,也是最进本、最重要的表。所以我们日常所说的表大多值普通表,而其他表都有自己的特殊用途。

2)分区表

分区表将数据水平划分为多个单元的表,这些单元可以分布到数据库中的多个文件组中,实现对单元中数据的并行访问。若表的数据量非常庞大,并且这些数据经常被以不同的方式访问,则可以考虑建立分区表。简言之,分区表主要用于方便地管理大型表,提高对这些表中数据的使用率。

3)临时表

临时表顾名思义,临时表就是被临时创建,不能永久保存的表。临时表又分为本地临时表和全局临时表。临时表被创建之后如果不主动删除的话会一直存在到SQL Server实例断开连接为止。另外一个区别在于本地临时表支队创建者可见,而全局临时表则对所有用户和连接可见。

4)系统表

系统表的作用就显而易见了,主要用于存储有关SQL Server服务器的配置,数据库的设置,用户、架构等信息。一般只能由数据库管理员(DBA)来使用。

4. 创建和修改表

1)创建普通表

最简单的创建表语法如下:

CREATE TABL 表名
(
    列    数据类型    约束或者默认值,
    列    数据类型    约束或者默认值,
    ………
)

2)创建临时表

创建临时表非常简单。前面说临时表分为本地临时表和全局临时表,和创建普通表唯一的区别在于多家了“#”号,本地临时表加了一个“#”号,如#Student。全局临时表加了两个“#”号,如##Student。

演示创建临时表的方法-利用查询创建表:

select ID,STOCK into #order from orders
go
select *from #order
go

注意:尽量不要使用临时表,除非你必须这样做.一般使用子查询可以代替临时表。使用临时表会带来系统开销,如果你是用COM+进行编程,它还会给你带来很大的麻烦,因为COM+使用数据库连接池而临时表却自始至终都存在,前面已经提到过,除非手动删除,否则临时表将一直存在到断开连接为止。SQL Server提供了一些替代方案,比如Table数据类型。

3)创建分区表

什么是分区?为了改善大型表以及具有各种访问模式的表的可伸缩性和可管理性。

为什么要使用分区?通常,创建表是为了存储某种实体(例如客户或销售)的信息,并且每个表只具有描述该实体的属性信息。一个表对应一个实体是最容易设计和理解的,因此不需要优化这种表的性能、可伸缩性和可管理性,尤其是在表不是特别大的情况下。那么到底怎样才称为是大型表呢?超大型数据库(VLDB)的大小以数百GB计算,甚至以TB计算,但这个术语不一定能够反映数据库中各个表的大小。大型数据库是指无法按照预期方式运行的数据库,或者运行成本或维护成本超出预定维护要求或预算要求的数据库。这些要求也适用于表,如果其他用户的活动或维护操作限制了数据的可用性,则可以认为表非常大。例如,如果性能严重下降,或者每天、每周甚至每个月的维护期间有两个小时无法访问数据,则可以认为表非常大。有这些情况下,周期性的停机时间是可以接受的,但是通过更好的设计和分区实现,通常是可以避免或最大限度地减少这种情况的发生的。

除了大小之外,当表中的不同行集拥有不同的使用模式时,具有不同访问模式的表也可能会影响性能和可用性。尽管使用模式并非总是在变化(这也不是进行分区的必要条件),但在使用模式发生变化时,通过分区可以进一步改善挂历、性能和可用性。还以销售表为例,当前月份的数据可能是可读可写的,但以往月份的数据(通常占表数据的大部分)是制度的。在数据使用发生变化类似的情况下,或在维护成本随着在表中读写数据的次数增加而变得异常庞大的情况下,表响应用户请求的能力可能会受到影响。相应地,这也限制了服务器的可用性和可伸缩性。

此外,如果以不同的方式使用大量数据集,则需要经常对静态数据执行维护操作。这可能造成代价高昂的结果,例如性能问题、阻塞问题、备份(空间、时间和运营成本),还可能会对服务器的整体可伸缩性产生负面影响。

分区可以带来什么帮助?当表和索引变得非常大时,分区可以将数据分为更小、更容易管理的部分,从而提供一定的帮助。

此外,如果具有多个CPU的系统中存在一个大型表,则对该表进行分区可以通过并行操作获得更好的性能。通过对各个并行子集执行多项操作,可以改善在极大型数据集(例如数百万行)中执行大规模操作的性能。通过分区改善性能的例子可以从以前版本中的聚集看出。例如,除了聚集成一个大型表外,SQL Server还可以分别处理各个分区,然后将各个分区的聚集结果再聚集起来。在SQL Server2008中,连接大型数据集的查询可以通过分区直接受益;SQL Server2008中,已分区为相同分区键和相同分区函数的相关表(如Order和OrderDetails表)被称为已对齐。当优化程序检测到两个分区切已对齐的表连接在一起时,SQL Server2008可以先将统一分区中的数据连接起来,然后再将结果合并起来。这使得SQL Server2008可以更有效地使用具有多个CPU的计算机。

3)增加和删除列

ALTER TABLE 表名    --向表中添加列
ADD
列名1 数据类型 是否可空,
列名2 数据类型 是否可空
ALTER TABLE 表名
DROP COLUMN
列名1,列名2
EXEC sp_help 表名   --查看表信息

4)修改列

sp_rename ‘表名.列名‘,‘新列名‘    --修改列名

4)约束

约束就是为了保证数据的完整性。

数据库三大约束:实体完整性(主键),参照完整性(外键),用户定义完整性

ALTER TABLE 表名    --添加主键方式之一(记得原先有主键的话要先删除在执行)
ADD
CONSTRAINT 主键名 PRIMARY KEY(l列名)
CREATE TABLE 表名
(
    外键列名 数据类型 REFERENCES 表名(主键名)    --指定外键关联(方式1)
    --方式2采用constraint关键字创建外键约束
   CONSTRAINT 外键约束名称 FOREIGN KEY (外键列名) REFERENCES 主表名(id)
)
ALTER TABLE 表名    --默认约束
ADD CONSTRAINT default_name DEFAULT ‘默认值‘ FOR 列名
--UNIQUE约束指定表中某一列或多个列不能有相同的两行或者两行以上的数据存在
CREATE TABLE 表名
(
    列名 数据类型 UNIQUE --方式1
    CONSTRAINT  约束名称 UNIQUE(列1,列2) --方式2
)
--关闭约束检测
NOCHECK CONSTRAINT 约束名
NOCHECK CONSTRAINT ALL
--开启约束检测
CHECK CONSTRAINT 约束名
CHECK CONSTRAINT ALL
时间: 2024-11-05 15:53:23

SQL-Server数据库学习笔记-表的相关文章

SQL Server数据库学习笔记-设计表时应该考虑的因素

设计数据库其实就是设计数据库中的表.到底要注意些什么才能够设计好一个数据库呢?一个宗旨,8个建议. 一个宗旨“尽量少的表,每个表中尽量少的列,合理的表结构”. 8个建议: 第一个,首先要考虑的是咱们这个数据库的主要作用是什么?至少包含哪些数据?这些数据又分别属于哪些实体对象?对象之间又存在什么样的关系?比如说新闻文章管理系统的数据库,它要存放的数据至少包括:文章分类.文章标题.发文时间.作者:而既然是管理系统,那么肯定会有人要添加.删除或修改文章,那么就延伸出管理员,有管理员了就存在账号.密码:

SQL Server数据库学习笔记-概念数据模型

概念数据模型(Conceptual Data Model)也称为信息模型.它是对客观事物及其联系的抽象,用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具.概念数据模型摆脱了计算机系统及数据库管理系统的具体技术问题,集中精力分析数据及数据之间的联系等,与具体数据库管理系统无关.概念数据模型必须转换成逻辑数据模型,才能在数据库管理系统中实现.它强调其语义表达能力,即能够较方便.直接地表达应用中的各种语义只是.这类模型概念简单.清晰.易于被用户理解,是数据

SQL Server数据库学习笔记-外键

关于主键的话大家很好理解,主键的主要作用就是用来标识一条数据是唯一的,也就是保证数据的实体完整性.防止数据重复.但是外键的话就有许多的疑问了,那外键是咋回事儿呢? 1. 外键的定义: 外键(FK)是用于建立和加强两个表数据之间连接的一列或多列.通过将保存表中主键值的一列或多列中的值添加到另一个表中,可创建两个表之间的连接.这个列就成为第二个表的外键.它表示了两个表之间的关系. 2. 为什么要使用外键? 为了保证数据的参照完整性.补充:参照的完整性要求关系中不允许引用不存在的实体.与实体完整性是关

SQL Server数据库学习笔记-E-R模型

实体(Entities)联系(Relationships)模型简称E-R模型也称E-R方法,是由P.P.Chen于1976年首先提出的.还有一个关键元素Attributes-属性,它提供不受任何数据库管理系统(DBMS)约束的面向用户的表达方法,在数据库设计中被广泛用作数据建模的工具. E-R图也即实体-联系图(Entity Reationship Diagram),提供了表示实体.属性和联系的方法,用来描述显示时间的概念模型(不同于概念数据模型). E-R图表示方法: 实体(Entity):用

SQL Server数据库学习总结

经过一段时间的学习,也对数据库有了一些认识,数据库基本是由表,关系,操作组成:对于初学者首先要学的 一图胜"十"言:SQL Server 数据库总结 一个大概的总结 经过一段时间的学习,也对数据库有了一些认识.  数据库基本是由表,关系,操作组成:对于初学者首先要学的:  1.数据库是如何存储数据的  表,约束,触发器  2.数据库是如何操作数据的  insert,update,delete T-sql 函数 存储过程 触发器  3.数据库是如何显示数据的  select SQLSer

SQL Server数据库进阶之表分区实战演练

一.课程介绍 1.1.需求背景 假设,你有一个销售记录表,记录着每个销售情况,那么你就可以把这个销售记录表按时间分成几个小表,例如说5个小表吧.2009年以前的记录使用一个表,2010年的记录使用一个表,2011年的记录使用一个表,2012年的记录使用一个表,2012年以后的记录使用一个表.那么,你想查询哪个年份的记录,就可以去相对应的表里查询,由于每个表中的记录数少了,查询起来时间自然也会减少.但将一个大表分成几个小表的处理方式,会给程序员增加编程上的难度.以添加记录为例,以上5个表是独立的5

清空SQL Server数据库中所有表数据的方法

其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公开的sp_MSForEachTable存储过程. 也许很多读者朋友都经历过这样的事情:要在开发数据库基础上清理一个空库,但由于对数据库结构缺乏整体了解,在删除一个表的记录时,删除不了,因为可能有外键约束,一个常见的数据库结构是一个主表,一个子表,这种情况下一般都得先删除子表记录,再删除主表记录. 说道删除数据记录,

关于SQL SERVER数据库学习总结

对于SQL SERFVER数据库也学了有一阵子了,自己也对自己所学做了一些总结. 我们首先学习数据库设计的一些知识点和用SQL语句建库. 设计数据库步骤:需求分析阶段,概要设计阶段,详细设计阶段, 建数据库的SQL语句如下(包含了如果有该数据库先删除在建立数据库) use masterGOif exists(select * from sysdatabases where name='Wages')DROP database WagesCREATE DATABASE Wages ON (  NA

SQL Server LocalDB 学习笔记 02 基本管理

管理LocalDB 1. SqlLocalDB命令 安装完毕之后,可以看看环境变量中的Path,一般都会有 %ProgramFiles%\Microsoft SQL Server\110\Tools\Binn 这个就是SqlLocalDB存放的位置,如果在cmd之下不生效,编辑按钮点一下(什么都不改),之后确定,最后外层确定,就让新的Path生效了. 创建数据库实例 c SqlLocalDB create "实例名字" -s 参数-s可选,加上之后表示创建之后直接启动实例 删除数据库实