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)创建普通表

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

  1. CREATE TABL 表名
  2. (
  3. 数据类型 约束或者默认值,
  4. 数据类型 约束或者默认值,
  5. ………
  6. )

2)创建临时表

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

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

  1. select ID,STOCK into #order from orders
  2. go
  3. select *from #order
  4. 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)增加和删除列

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

4)修改列

  1. sp_rename '表名.列名','新列名' --修改列名

4)约束

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

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

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

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

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

    设计数据库其实就是设计数据库中的表.到底要注意些什么才能够设计好一个数据库呢?一个宗旨,8个建议. 一个宗旨“尽量少的表,每个表中尽量少的列,合理的表结构”. 8个建议: 第一个,首先要考虑的是咱们这 ...

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

    概念数据模型(Conceptual Data Model)也称为信息模型.它是对客观事物及其联系的抽象,用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具. ...

  3. SQL Server数据库学习笔记-三大范式

    第一范式(First Normal Form,简称1NF):数据库表中的字段都是单一属性的,不可再分.这个单一属性由基本类型构成,包括整型.实数.字符型.逻辑型.日期型等.要求一个属性只包含一个值,多 ...

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

    实体(Entities)联系(Relationships)模型简称E-R模型也称E-R方法,是由P.P.Chen于1976年首先提出的.还有一个关键元素Attributes-属性,它提供不受任何数据库 ...

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

    关于主键的话大家很好理解,主键的主要作用就是用来标识一条数据是唯一的,也就是保证数据的实体完整性.防止数据重复.但是外键的话就有许多的疑问了,那外键是咋回事儿呢? 1. 外键的定义: 外键(FK)是用 ...

  6. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

  7. 关于SQL SERVER数据库学习总结

    对于SQL SERFVER数据库也学了有一阵子了,自己也对自己所学做了一些总结. 我们首先学习数据库设计的一些知识点和用SQL语句建库. 设计数据库步骤:需求分析阶段,概要设计阶段,详细设计阶段, 建 ...

  8. 清空SQL Server数据库中所有表数据的方法(转)

    清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...

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

    原文:清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可 ...

  10. sql server数据库备份单个表的结构和数据生成脚本

    1.使用场景:sql server数据库备份单个表的结构和数据,在我们要修改正式系统的数据的一天或者多条某些数据时候,要执行update语句操作,安全稳健考虑,最好先做好所修改的表的结构和数据备份! ...

随机推荐

  1. oracle中,行转列函数wm_concat()结果有长度限制,重写该函数解决

    --Type CREATE OR REPLACE TYPE zh_concat_im AUTHID CURRENT_USER AS OBJECT ( CURR_STR clob, STATIC FUN ...

  2. 智能指针(二):shared_ptr实现原理

    前面讲到auto_ptr有个很大的缺陷就是所有权的转移,就是一个对象的内存块只能被一个智能指针对象所拥有.但我们有些时候希望共用那个内存块.于是C++ 11标准中有了shared_ptr这样的智能指针 ...

  3. JMeter笔记4:测试结果-聚合报告的字段说明

    1.Lable :定义 HTTP 请求名称2.Samples :表示这次测试中一共发出了多少个请求3.Average :平均响应时长---默认情况下是单个Request的平均响应时长,当使用Trans ...

  4. 如何查找Mac上的USB存储设备使用痕迹

    最近刚好有个案子的证物主机是MBP, OS X版本为El Capitan,案况与营业秘密外泄有关,当中要找有关USB存储设备的使用痕迹. 要提醒大家的是,不同版本的OS X,各种迹证的存放文件名称及路 ...

  5. leetcode 8

    string类型转换为int类型,需要考虑不同的转换情况. “   04”  转换结果   4: “   4   43”  转换结果  4: “a@12 ”   转换结果    0: “12a”   ...

  6. linux下alias命令详解

    功能说明:设置指令的别名. 语 法:alias[别名]=[指令名称] 形如: alias cp=“cp -i” : 补充说明:用户可利用alias,自定指令的别名.若仅输入alias,则可列出目前所有 ...

  7. vue.js插件使用(01) vue-resource

    本文的主要内容如下: 介绍vue-resource的特点 介绍vue-resource的基本使用方法 基于this.$http的增删查改示例 基于this.$resource的增删查改示例 基于int ...

  8. JS组件系列——KnockoutJS用法

    前言:出于某种原因,需要学习下Knockout.js,这个组件很早前听说过,但一直没尝试使用,这两天学习了下,觉得它真心不错,双向绑定的机制简直太爽了.今天打算结合bootstrapTable和Kno ...

  9. MongoDb Replica Set中使用的地址

    Unable to connect to a member of the replica set matching the read preference Primary 今天尝试使用MongoDB ...

  10. Linux命令行修改IP、网关、DNS的方法

    Linux中在命令行中修改IP地址.网关.DNS的方法. 网卡eth0    IP修改为 102.168.0.1 复制代码代码如下: ifconfig eth0 102.168.0.1 netmask ...