SQL SERVER 2008 学习笔记(一)

    1. 数据表的基本结构

 

表是数据库的基本构造块,同时,表是数据的集合,是用来存储数据和操作数据的逻辑结构。表是由行和列组成的。

      • 表的列名在同一个表中具有惟一性,同一列的数据属于同一种数据类型。

 

      • 定义其它属性:NULL 或NOTNULL 属性和IDENTITY 属性。

 

数据表被分为永久性数据表和临时数据表两种。临时表又分为局部临时表和全局临时

 

表.

 

DBCC PAGE:查看数据结构

 

 

 

    1. SQL 数据结构:

 

在计算机中数据有两种特征:类型和长度。所谓数据类型就是以数据的表现方式和存储方式来划分的数据的种类。在SQL Server 中每个变量、参数、表达式等都有数据类型。当两个具有不同数据类型的表达式通过运算符进行组合时,结果的特征遵循以下原则:

  • 结果的数据类型是通过将数据类型的优先顺序规则应用到输入表达式的数据类型来

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

数据类型分类

数据类型

基本目的

精确数值

BIT 、INT、SMALLINT、TINYINT、BIGINT 、

DECIMAL(p,s)、NUMERIC   (p,s)

存储带或不带小数的精确数值

近似数值

FLOAT(p)、REAL

存储带小数或不带小数的数值

货币

MONEY、SMALLMONEY

存储带 4 位小数位的数值,专门用于

货币值,

日期和时间

DATE、TIME、DATETIME、SMALLDATETIME

存储时间和日期信息

字符

CHAR(n)   、  NCHAR(n)   、  VARCHAR(n)   、

VARCHAR(max) 、 NVARCHAR(n) 、

NVARCHAR(max) 、TEXT、NTEXT

存储基于可变长度的字符的值

二进制

BINARY(n)、VARBINARY(n)、VARBI NARY(max)、

IMAGE

存储二进制表示数据

特定数据类型

TIMESTAMP 、TABLE、UNIQUEIDENTIFIER、

CURSOR、SQL_VARI ANT、XML

专门处理的复杂的数据类型

 

      1. 、精确数值数据类型:

 

数据类型

存储长度

取值范围

说明

 

 

BIT

1B

0 或者 1

如果输入 0 或 1 以外的值,将被视为

1。

如果表中的列为 8 bit 或更少,则这些列作为 1 个字节存储。如果列为 9 到

16 bit,则这些列作为 2 个字节存储,

以此类推

INT

4B

-2^31 ~2^31-1

正负整数

SMALLINT

2B

-32768~32767

正负整数

TINYINT

1B

0~255

正整数

BIGINT

8B

-2^63 ~2^63-1

大范围的正负整数

DECIMAL(p,s)

5~17B

- 10^38 +1 ~ 10^38 - 1

最大可存储 38 位十进制数

NUMERIC(p,s)

5~17B

- 10^38 +1 ~ 10^38 - 1

与 DECIMAL 等价

 

数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数。  整数由正整数和负整数组成,例如 39、25、0-2  和 33967。在 Microsoft SQL Server

中,整数存储的数据类型是 Int,Smallint   和 Tinyint。Int   数据类型存储数据的范围

 

大于 Smallint 数据类型存储数据的范围,而 Smallint 数据类型存储数据的范围大于Tinyint 数据类型存储数据的范围。使用 Int 数据类型存储数据的范围是从 -2 147 483 648  到 2 147 483 647(每一个值要求 4 个字节存储空间)。使用 Smallint  数据类

型时,存储数据的范围从 -32 768 到 32 767(每一个值要求 2 个字节存储空间)。使用 Tinyint 数据类型时,存储数据的范围是从 0 到 255(每一个值要求 1 个字节存储空间),BIGINT 支持大范围的正负整数,可存储-2^63  ~2^63-1 的数值。

在数据类型优先次序表中,bigint 介于 smallmoney 和 int 之间。只有当参数表达

 

式为 bigint 数据类型时,函数才返回 bigint。SQL Server  不会自动将其他整数数据类型(tinyint、smallint 和 int)提升为 bigint

精确小数数据在 SQL Server 中的数据类型是 Decimal 和 Numeric。这种数据所

 

占的存储空间根据该数据的位数后的位数来确定。Decimal 数据类型使用 128 位来表示值来用作数值计算。

DECIMAL(p,s):其中 p 代表精度,最多可以存储十进制数字的总位数,包括小数点

 

 

 

左边和右边的位数。该精度必须是从 1 到最大精度 38 之间的值。默认精度为 18。

 

S 代表小数位数,小数点右边可以存储的十进制数字的最大位数。小数位数必须是从 0 到 p 之间的值。仅在指定精度后才可以指定小数位数。默认的小数位数为 0;因此, 0 <= s <= p。最大存储大小基于精度而变化。

      1. 、近似数值数据类型

 

数据类型

存储长度

取值范围

说明

FLOAT(n)

4B 或 8B

1.79E + 308~- 2.23E - 308、0 和 2. 23E –

308~1.79E + 308

存储大型浮点数

REAL

4B

-3.40E + 38 至 - 1.18E - 38 、 0 和 1.18E - 38

至 3.40E + 38

SQL-92 标准已被 f loat

替换

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

数据类型

存储长度

值域

说明

MONEY

8B

-922,337,203, 685,477. 5808 ~

922,337,203,685,477.5807

存储大型货币值

SMALLMONEY

4B

-214,748.3648~214, 748.3647

存储小型货币值

 

 

2.2.4、日期和时间数据类型

 

数据类型

存储长度

取值范围

精度

DATE

3B

0001-01-01 到 9999-12-31

1 天

TIME

3B~5B

00:00:00.0000000 到 23:59:59.9999999

100 纳秒

SMALLDATETIME

4B

1900-01-01 到 2079-06-06

1 分钟

 

 

DATETIME

8B

1753-01-01 到 9999-12-31

0.00333 秒

DATETIME2

6B~8B

0001-01-01   00:00:00.0000000   到 9999-12-31

23:59:59.9999999

100 纳秒

DATETIMEOFFSET

8B~10B

0001-01-01   00:00:00.0000000   到 9999-12-31

23:59:59.9999999(以 UTC 时间表示)

100 纳秒

 

SQL Server 2005 数据库引擎用两个 4 字节的整数内部存储 datetime 数据类型的值。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

数据类型

存储长度

取值范围

说明

CHAR(n)

1B~8000B

最多 8000 个字符

固定长度 ANSI 数据类型

NCHAR(n)

2B~8000B

最多 4000 个字符

固定长度 Unicode 数据类型

VARCHAR(n)

1B~8000B

最多 8000 个字符

可变长度 ANSI 数据类型

VARCHAR(max)

最大 2G

最多 1 073 741 824 个字符

可变长度 ANSI 数据类型

NVARCHAR(n)

2B~8000B

最多 4000 个字符

可变长度 Unicode 数据类型

NVARCHAR(max)

最大 2G

最多 536 870 912 个字符

可变长度 Unicode 数据类型

TEXT

最大 2G

最多 1 073 741 824 个字符

可变长度 ANSI 数据类型

NTEXT

最大 2G

最多 536 870 912 个字符

可变长度 Unicode 数据类型

 

 

 

和二进制字符串数据类型。下面分别进行介绍。

 

  1. 、 非Unicode 字符串包括 3 种具体数据类型: CharVarchar Text

 

字符数据是由任何字母、符号和数字任意组合而成的数据。

 

Varchar 是变长字符数据,其长度不超过 8KB。Char 是定长字符数据,其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用 Text 数据类型存储。例如,因为 Html 文档全部都是 ASCII 字符,并且在一般情况下长度超过 8KB,所以这些文档可以

Text 数据类型存储在SQL Server  中。非unicode 字符串数据类型:

 

 

 

 

 

 

 

 

 

如果未在数据定义或变量声明语句中指定 n,则默认长度为 1。如果在使用 CAST 和

 

CONVERT 函数时未指定 n,则默认长度为 30。

 

关于在何种情况下使用char 或nchar,SQL 中列出了下列几个原则。

 

  • 如果列数据项的大小一致,则使用char。

 

  • 如果列数据项的大小差异相当大,则使用 varchar。

 

  • 如果列数据项大小相差很大,而且大小可能超过 8000 字节,请使用 varchar(max)。

 

  1. 、Unicode 字符串包括 3 种具体数据类型:Nchar,Nvarchar  Ntext

 

在Microsoft SQL Server 中,传统的非 Unicode 数据类型允许使用由特定字符集定义的字符。在 SQL Server 安装过程中,允许选择一种字符集。使用 Unicode 数据类型,列中可以存储任何由Unicode 标准定义的字符。在 Unicode  标准中,包括了以各种字符集定义的全部字符。使用 Unicode 数据类型,所战胜的是使用非 Unicode 数据类型所占用的大小的两倍。

 

在 SQL Server 中,Unicode 数据以 Nchar、Nvarchar  和 Ntext  数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时,应该 使用Nvarchar 字符类型,这时最多可以存储 4000 个字符。当列的长度固定不变时, 应该使用 Nchar  字符类型,同样,这时最多可以存储 4000  个字符。当使用 Ntext  数据类型时,该列可以存储多于 4000 个字符。

Unicode 字符串数据类型:

 

数据类型名称

nchar [ ( n ) ]

n 个字符的固定长度的 Unicode 字符数据。n 值为 1~4000,存储大小

为两倍 n 字节

 

nvarchar [ ( n | max ) ]

可变长度 Unicode 字符数据。n 值为 1~4000max 指示最大存储大小231–1 字节。存储大小是所输入字符个数的两倍加 2 个字节。所输入

数据的长度可以为 0 个字符

ntext

长度可变的 Unicode 数据,最大长度为 230–1 (1 073 741 823)个字符。

存储大小是所输入字符个数的两倍(以字节为单位)

注意:关于何时使用 nchar 和nvarchar,其遵守的原则与非 Unicode 字符串的原则基本相同。可变长度数据类型具有变动长度的特性,因为VARCHAR 数据类型的存储长度为实际

数值长度,若输入数据的字符数小于 n ,则系统不会在其后添加空格来填满设定好的空间。

 

反之固定长度的类型如果输入字符长度比定义长度小,则在其后添加空格来填满长度。

 

char(nchar)varchar(nvarchar)的比较:

  • 1 、数据存储开销。
    • 每个 varchar 列需要额外的两个字节,用于反映存储的数据的长度。

 

    • 每个可为NULL 的char 列,需要一些字节(空位图)来反应数据的为空性。

 

    • 无论实际数据的长度是多少,char    按照定义的长度分配存储空间,为定长型。

 

    • varchar    是变长字符数据类型,根据实际存储的数据长度来分配数据存储空间。
  • 2 、NULL 值(空值)。
    • char 列的NULL 值占用存储空间。

 

    • varcahr 列的NULL 值不占用存储空间。

 

    • 插入同样数量的NULL 值,varchar 列的插入效率明显高出char 列。选择 char 还是选择varchar 的建议:
  • 1  、适宜于char 的情况:
    • 列中的各行数据长度基本一致,长度变化不超过 50 字节;

 

    • 数据变更频繁,数据检索的需求较少。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

create table tb1 (col varchar(100)) go

insert into tb1 values('0123456789')

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值